学习目标:
理解spring的优缺点
理解springboot的特点
理解springboot核心功能
搭建springboot环境
能够完成application.properties配置文件的配置
能够完成application.yml配置文件
集成mybatis junit springdata jpaspring的优缺点:
配置过于复杂。
项目中的jar包版本冲突没有解决。springboot概述以及解决方案:
不用写业务 和 配置之间总是切换。
基于spring开发提供更快的入门体验
不配置也能用,配置也能用。
提供了许多业务之外的功能。比如安全、健康监测、外部配置。
他不是spring的增强,而是能够让你更快速的使用springspringboot的核心功能:
起步依赖
自动配置springboot快速入门:
1 创建maven工程
2 注入依赖关系
<parent>
<!--所有的springboot工程都要继承这个依赖-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent><dependencies>
<!--基于web功能的依赖 在springboot中都是以功能为单位
按功能来添加jar包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>3 创建引导类
在src - main中创建com.itrucheng.MySpringBootApplication类
package com.itrucheng;/*
* auth:熊汝成
* date:2020/2/1
* description:
*/
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication //这说明底下的类一个引导类
public class MySpringBootApplication {
//main方法只是代表程序的入口
public static void main(String[] args) {
//run方法要运行引导类,将其字节码作为参数
SpringApplication.run(MySpringBootApplication.class);
}
}然后运行主类就可以了。
4 编写控制类
一定要在引导类的同级或者子级目录下构建控制类
MyController.java
package com.itrucheng 或者 com.itrucheng.controller
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MyController {
@RequestMapping("/quick")
@ResponseBody
public String quick() {
return "hello world";
}
}热部署的配置
- 添加热部署功能依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>- 修改idea的一些设置
首先在settings -> compiler ->勾选Build project automatically
再 ctrl+shift+alt+/,点击registry,再勾选.running 即可
这样,就可以不用重启项目直接修改代码了
利用IDEA快速构建项目
略
SpringBoot的起步依赖原理
在前面介绍的starter-parent以及starter-web将一些基本的数据进行了封装。
在starter-parent中
<resource>
<filtering>true</filtering>
<directory>${basedir}/src/main/resources</directory>
<includes>
<include>**/application*.yml</include>
<include>**/application*.yaml</include>
<include>**/application*.properties</include>
</includes>
</resource>
<resource>发现它会默认读取resources下的以application开头的文件,这些都是放配置文件的。
当进入starter-parent的父文件starter-dependencies,发现它将所有的jar版本进行了固定,这样就做到了版本控制,解决了版本带来的冲突。
同样的道理,进入starter-web当中,我们也发现,它将需要的jar包(springmvc、spring、hibernate校验等)的坐标都收集起来,然后封装成starter-web,这样就实现了以功能为单位,摒弃了繁琐的jar的形式。
就是这种封装,做到了其起步依赖!
SpringBoot的自动配置原理
从引导类入手,点开@SpringBootApplication,再逐步点开@EnableAutoApplication等等注解,会最终发现,其自动配置的内容再org.springframework.boot:spring-boot-autoconfigure包下->META-INF下的spring.factory中,而默认的数据则保存在spring-configuration-metadate.json当中,内容+数据,实现了自动配置。
如果我们需要修改自动配置的内容,只需要在resources下建立application开头的文件,然后对应spring-configuration-metadate.json中的内容进行修改就可以了
关于获取yml中的数据
yml的格式
#普通数据的配置
name: zhangsan
#对象数据的配置
person:
name: lisi
age: 20
addr: beijing
server:
port: 8081
#普通集合的配置
cities:
- beijing
- tianjing
- guangzhou
#对象集合的配置
students:
- name: wangwu
age: 20
addr: beijing
- name: zhaoliu
age: 30
addr: shenzheng
#map的配置
map:
key1: value1
key2: value21.使用@Value获取yml中的数据
@RestController
public class MyController {
@Value("${}")
private String name;
@Value("${person.age}")
private Integer age;
@RequestMapping("/quick")
public String quick() {
return "name:"+name+" age:"+age;
}
}2.使用@ConfigurationProperties获取
首先先建立一个JavaBean
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component //一定要将这个bean注入到容器当中,才能使用下面的注解
@ConfigurationProperties(prefix = "person") //将yml的对象前缀加进去
public class Person {
//要添加get set方法才行
private String name;
private String addr;
private Integer age;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", addr='" + addr + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}再到控制类中获取
@RestController
public class MyController {
@Autowired //从容器中获取person
private Person person;
@RequestMapping("/quick")
public String quick() {
return person.toString();
}
}配置Configuration-processor
为什么要配置,因为配置了以后,在写javabean的属性后,就可以在yml中自动显示要有的属性。
如何配置,只需要添加如下依赖便可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>整合Mybatis
步骤如下:
1.导入依赖
2.添加数据库连接信息
3.创建表和实体类
4.编写mapper接口与mapper.xml
5.完成springboot与mybatis连接关系1.导入依赖
<!--添加mybatis的起步依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--添加数据库驱动坐标,由于版本控制,不需要写版本号,但高版本存在一些问题,于是我们手动将版本降低-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>2.添加数据库连接关系
我们在application.properties中添加如下关系:
#添加数据库的连接信息
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mdb?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=密码当然,以上这些元数据还是可以再org.springframework.boot:spring-boot-autoconfigure的json中找到这些配置信息。
3.创建表和实体类
package com.itrucheng.domain.Custom;
public class Custom {
private String custom_id;
private String name;
private String phone;
private String place;
public get/set();
public toString();
}4.编写接口与xml
接口:
package com.itrucheng.mapper;
import com.itrucheng.domain.Custom;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper //添加到spring容器当中,相当于以前的dao
public interface CustomMapper {
public List<Custom> queryAll();
}再到resource下创立mapper文件夹,并建立CustomMapper.xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itrucheng.mapper.CustomMapper"> <!-- 接口名要用全名,没有别名 -->
<select id="queryAll" resultType="com.itrucheng.domain.Custom">
select * from custom;
</select>
</mapper>5.将mybatis与springboot融合
其实就是在application.properties当中添加一些信息:
#配置mybatis的信息
#为了找到mapper接口对于的xml文件,由于编译完后,这些文件是直接放在类路径下。
mybatis.mapper-locations=classpath:mapper/*Mapper.xml同理可以在mybatis.spring.boot的json当中找到,为了简单,我们直接只配置一个最必要的信息
6.编写控制类来测试
@RestController //采用此种方式绝不会出bug
public class MybatisController {
@Autowired //将容器当中的CustomMapper获取出来,报红线没有关系
private CustomMapper customMapper;
@RequestMapping("/find")
public List<Custom> find() {
return customMapper.queryAll();
}
}补充:
1.有关xml头文件注入依赖的解决方案:
















