SpringBoot学习笔记(一)

一、介绍

(1)SpringBoot是SpringMVC的升级版,两者没有必然的联系。

 (2)特点:化繁为简,简化配置;备受关注,是下一代的框架;微服务的入门级微框架(微服务->springcloud->springboot)。

二、第一个Springboot应用

(1)环境:idea开发工具、jdk1.8、maven的3.3.9版本以上。(环境变量)

(2)步骤:





点击finish,idea就会开始创建springboot项目。

注意:第一次的时候创建项目有点慢,可以在maven的配置文件settings.xml中添加阿里云maven镜像配置。

  <mirrors>
	<mirror>
            <id>nexus-aliyun</id>
	    <!--<mirrorOf>*</mirrorOf>-->
            <mirrorOf>central</mirrorOf>
            <name>Nexus aliyun</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
	</mirror>
  </mirrors>

创建完成后,项目的目录结构:



在pom.xml中修改为jar包形式:

<packaging>jar</packaging>

maven的结构如下:


(3)编写helloworld类


启动程序,在浏览器输入http://localhost:8080/hello,出现如下表示第一个Springboot程序成功了。


(4)运行SpringBoot程序

        1.运行main()所在的类


若console出现如下信息:


启动失败,原因是没有找到tomcat,需要把删除pom.xml的

<scope>provided</scope>


2.打开cmd窗口,进入项目根目录下,执行mvn spring-boot:run。


3.打开cmd窗口,执行mvn install命令编译项目,然后进入项目的target目录下的,可以看见以jar或war结尾的jar包/war包,使用java命令执行jar包/war包,java -jar ****.jar/****.war。

三、项目属性配置

(1) 主要配置文件是application.properties或application.yml(推荐,书写和阅读更加方便,简单)。

注意:当两个文件都存在,内容也相同,application.properties会覆盖application.yml文件,使application.yml失效。(可测试:两个文件都填写server.port = 8081、server.servlet.context-path=/wangbin)

(2) 主要配置属性:

server.port = 8081==>设置tomcat的启动端口号        

server.servlet.context-path=/wangbin==》访问路径后添加wangbin,localhost:8080-->localhost:8080/wangbin

数据库配置:

                spring.datasource.url : jdbc:mysql://127.0.0.1:3306

                spring.datasource.username: root

                spring.datasource.password: root

                spring.datasource.driver-class-name: com.mysql.jdbc


除了springboot自带的一些配置选项,也可自定义属性配置:

比如在application.yml中定义属性(key-value):


如何使用自定义的属性呢?

方法一

使用注解@Value("${***}")形式


注意:在application.yml文件中自己使用自定义属性,也是使用${***}来获取属性的值。

方法二

若是一组属性,可以定义一个实体类,类上添加@ConfigurationProperties(prefix="**")



如何实现多环境配置呢?(生产/开发环境)

方法:定义三个yml文件,分别为appplication-dev.yml(开发环境)、application-prod.yml(生产环境)、application.yml文件,并在appliation.yml主配置文件添加spring.profiles.active=dev/prod(决定启动哪个配置文件)




注意:多环境如使用cmd窗口,java -jar启动的话,可以在后面添加配置--spring.profiles.active=dev/prod(注意不要有空格)


四、Controller的使用

@RequestMapping注解可以添加到类或方法上面,来映射url的,同时在属性value中添加多个值,在大括号里面,它表示对多个url映射到这个方法中。比如localhost:8080/hello 与localhost:8080/hi都可以访问同一个方法。


@PostMapping或@GetMapping等等是组合注解,等同于@RequestMapping(method=RequestMethod.GET)........

@PathVariable用法:


浏览器输入:localhost:8080/hello/200



浏览器输入localhost:8080/200/hello

结果--》



@RequestParam的用法:


浏览器输入 localhost:8080/hello?id=120


五、数据库连接操作

(1)使用spring-data-jpa组件连接mysql数据库。JPA(java persistence api)定义了一系列对象持久化的标准,目前实现这一个规范的产品有Hiberate、TopLink等。

(2)步骤

1.添加依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
</dependency>

2. 配置数据库

在application.yml文件中添加:

spring:  
  #mysql数据库配置
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/wb_user
    username: root
    password: root
  #spring-data-jpa配置
  jpa:
    hibernate:
      ddl-auto: create
    show-sql: true

其中:ddl-auto:create是根据注解的实体类自动创建与之对应的表。

3. 创建实体类


运行时就会生成对应的animal和hibernate_sequence这两张表。

表结构:

CREATE TABLE `hibernate_sequence` (
  `next_val` bigint(20) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `animal` (
  `id` int(11) NOT NULL,
  `kind` varchar(255) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

注意:如果你使用的jpa版本是最新的,我使用的是2.0.2.RELEASE版本,会创建上面的两张表。版本低些,只会创建animal这一张表。当你使用出现两种表,说明你的jpa版本是高的。

由于jpa版本中升级后的策略变化,新版如果在实体类上增加@GeneratedValue的自增注解,是没有什么作用的,还需要在application.yml的配置文件中,添加:

spring:
  jpa:
    hibernate:
      use-new-id-generator-mappings: false

这样重新启动会只产生一张表,并且id是自增的。


4. 如何使用spring-data-jpa对数据库中表进行增删改查呢?

(1) 创建一个继承JpaRepository的接口

public interface AnimalRepository extends JpaRepository<Animal,Integer>{
}

(2)直接在需要操作数据库的地方,注入即可

@Autowired
private AnimalRepository animalRepository;

(3)增删改查

可以调用jpaReposity中的增删改查方法,实现操作数据库。

代码:

@RestController
public class HelloController {

    @Autowired
    private AnimalRepository animalRepository;

    // 查询所有
    @PostMapping("/getAll")
    public List<Animal> getAllAnimal() {
        return animalRepository.findAll();
    }

    // 增加
    @PostMapping("/addAnimal")
    public Animal addAnimal(@RequestParam("name") String name, @RequestParam("kind") String kind) {
        Animal animal = new Animal();
        animal.setName(name);
        animal.setKind(kind);
        return animalRepository.save(animal);
    }

    // 删除
    @DeleteMapping("/deleteAnimal/{id}")
    public void deleteAnimal(@PathVariable("id") Integer id) {
        animalRepository.deleteById(id);
    }

    // 更新
    @PutMapping("/updateAnimal/{id}")
    public Animal updateAnimal(@PathVariable("id") Integer id, @RequestParam("name") String name, @RequestParam("kind") String kind) {
        Animal animal = new Animal();
        animal.setId(id);
        animal.setName(name);
        animal.setKind(kind);
        return animalRepository.save(animal);
    }

    // 根据id查找
    @GetMapping("/findById")
    public Animal findOne(@RequestParam("id") Integer id) {
        Optional<Animal> animal = animalRepository.findById(id);
        return animal.get();
    }

    // 根据kind查找
    @GetMapping("/findByKind/{kind}")
    public List<Animal> findByKind(@PathVariable(value = "kind") String kind) {
        return animalRepository.findByKind(kind);
    }
}
public interface AnimalRepository extends JpaRepository<Animal,Integer>{

    // 通过kind来查找(扩展方法)
    List<Animal> findByKind(String kind);
}

注意:若不是通过id来查询,通过其他的字段来查询,需要扩展自己的方法,其中方法名的命名是有规则的

六、如何调试模拟http的请求,来查看自己定义的接口呢?

我使用的是google浏览器的Advanced Rest Client插件的,关于这个工具的安装和使用请查看我的相关博客哈。

七、事务管理

这里只简单地处理,在需要进行事务管理的方法上面添加注解@Transactional



猜你喜欢

转载自blog.csdn.net/weixin_40364885/article/details/80671561