1. SpringBoot简介
1.1 原有Spring的优缺点分析
1.1.1 Spring的优点
spring是Java企业版(Java Enterprise Edition,简称J2EE)的轻量级替代品,无需开发重量级的(Enterprise JavaBean 简称EJB),Spring为企业级开发提供的相对简单的方法,通过依赖注入和面向切面编程,用简单的JavaBean对象实现EJB功能。
1.1.2 Spring的缺点
虽然Spring的组件代码是轻量级的,但事实配置却是重量级的,从一开始Spring使用XML配置。而且是很多的XML配置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身的显示XML配置。Spring 3.0引入基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。
Spring虽然实用,但是这些配置文件的都代表了开发时的消耗,除此之外,项目的依赖管理也是一件耗时耗力的事情。在环境搭建是,需要引入库的坐标,而且还需要分析导入已之有以来的其它库的坐标,一旦选错版本,随之而来的不兼容问题将会影响到项目的开发进度。
1.2 SpringBoot的核心功能
- 起步依赖:
起步依赖本质上是一个Maven的项目对象模型POM,定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。
简单的说:起步依赖就是将具备某种功能的坐标打包在一起,并提供一些特定的功能。 - 自动配置:
SpringBoot的自动配置是一个运行时(更准确的说,是程序启动时)的过程,考虑众多因素,才决定Spring配置应该用那个,不应该用哪个,该过程是Spring自动完成的,例如SqlSessionFactory的dataSource注入。
1.3 SpringBoot的概述
1.3.1 SpringBoot解决上述Spring的缺点
SpringBoot针对上面Spring出现的缺点进行改善和优化,基于约定优于配置
的思想,可以让开发人员必须在配置和逻辑业务之间思维的切换,全身心的投入到业务逻辑代码的编写,可以大大提高开发效率,一定程度上缩短项目周期。
1.3.2 SpringBoot的特点
- 为Spring开发者提供更快的入门体验。
- 开箱即用,无需XML的配置,同时可以修改默认值来满足特定的需求。
- 提供了一些大型项目的非功能性特性,如嵌入式服务器(Tomcat),安全,指标,健康检测,外部配置等。
- SpringBoot不是对Spring功能上的增强,而是提供一种快速使用Spring的方式。
2. SpringBoot快速入门
2.1 代码实现(四步搞定)
2.1.1 创建Maven工程,不用选择骨架创建
2.1.2 添加SpringBoot起步依赖
项目要求继承SpringBoot的起步依赖spring-boot-starter-parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
SpringBoot集成SpringMVC进行Controller的开发,所以还必须web的启动依赖
<!--web过程的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.1.3 编写SpringBoot引导类
//声明该类是一个SpringBoot引导类
@SpringBootApplication
@ComponentScan(basePackages = "com.liuzeyu.controller")
public class MySpringApplication {
public static void main(String[] args) {
//run方法表示运行SpringBoot,参数则是SpringBoot引导类得字节码对象
SpringApplication.run(MySpringApplication.class);
}
}
2.1.4 编写Controller类
@Controller
public class QuickController {
@RequestMapping("/quick")
@ResponseBody
public String quick(){
return "hello springboot";
}
}
项目启动:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.1.RELEASE)
2020-05-06 23:30:04.026 INFO 25680 --- [ main] MySpringApplication : Starting MySpringApplication on DESKTOP-28EHRNP with PID 25680 (D:\JavaProject\springboot\spring01_quick\target\classes started by liuzeyu in D:\JavaProject\springboot)
2020-05-06 23:30:04.029 INFO 25680 --- [ main] MySpringApplication : No active profile set, falling back to default profiles: default
2020-05-06 23:30:04.133 INFO 25680 --- [ main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4ae3c1cd: startup date [Wed May 06 23:30:04 CST 2020]; root of context hierarchy
2020-05-06 23:30:06.326 INFO 25680 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2020-05-06 23:30:06.369 INFO 25680 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2020-05-06 23:30:06.369 INFO 25680 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.29
2020-05-06 23:30:06.381 INFO 25680 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jdk1.8.0_144\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Java\jdk1.8.0_144\bin;C:\ProgramData\Microsoft\Windows\Start Menu\Programs\MySQL\MySQL Server 5.7;D:\DevelopTools\git\Git\Git\cmd;C:\Users\liuze\AppData\Local\Microsoft\WindowsApps;;.]
2020-05-06 23:30:06.573 INFO 25680 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2020-05-06 23:30:06.573 INFO 25680 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2450 ms
2020-05-06 23:30:06.775 INFO 25680 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Servlet dispatcherServlet mapped to [/]
2020-05-06 23:30:06.783 INFO 25680 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2020-05-06 23:30:06.783 INFO 25680 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2020-05-06 23:30:06.783 INFO 25680 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2020-05-06 23:30:06.783 INFO 25680 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2020-05-06 23:30:06.972 INFO 25680 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2020-05-06 23:30:07.245 INFO 25680 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4ae3c1cd: startup date [Wed May 06 23:30:04 CST 2020]; root of context hierarchy
2020-05-06 23:30:07.332 INFO 25680 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/quick]}" onto public java.lang.String com.liuzeyu.controller.QuickController.quick()
2020-05-06 23:30:07.337 INFO 25680 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2020-05-06 23:30:07.338 INFO 25680 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2020-05-06 23:30:07.365 INFO 25680 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-05-06 23:30:07.365 INFO 25680 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2020-05-06 23:30:07.555 INFO 25680 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2020-05-06 23:30:07.603 INFO 25680 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2020-05-06 23:30:07.607 INFO 25680 --- [ main] MySpringApplication : Started MySpringApplication in 4.054 seconds (JVM running for 4.757) 2020-05-06 23:31:19.373 INFO 25680 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet' 2020-05-06 23:31:19.373 INFO 25680 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started 2020-05-06 23:31:19.394 INFO 25680 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 21 ms
访问页面:
OK,入门案例到此为止。
2.2 SpringBoot工程热部署
我们在开发中反复修改类、页面等资源,每次修改后都是需要重新启动才生效,这样每次启动都很麻烦,浪费了大量的时间,我们可以在修改代码后不重启就能生效,配置步骤如下
- 在pom.xml中添加依赖
<!--热部署配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
- 打开idea得setting设置compiler
- 设置Registry,使用快捷键,shift+alt+ctrl+/
2.3 使用IDEA快速创建SpringBoot项目
- 新建Module,选择Spring Initializr
- 注意要选择springboot启动时需要的依赖
- finish即可
建立好的项目目录:
启动类:
@SpringBootApplication
public class Spring02Quick02Application {
public static void main(String[] args) {
SpringApplication.run(Spring02Quick02Application.class, args);
}
}
通过idea快速创建的SpringBoot项目的pom.xml中已经导入了我们选择的web的起步依赖的坐标
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.liuzeyu</groupId>
<artifactId>spring02_quick02</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring02_quick02</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
同样可以实现上述的入门案例。
3. SpringBoot原理分析(深入源码)
3.1 起步依赖原理分析
3.1.1 spring-boot-starter-parent分析
进入pom.xml,按住Ctrl进入spring-boot-starter-parent
可以看到springboot启动时回去加载
这些文件是干嘛的呢?
其实是我们修改覆盖springboot为我们提供一些约定配置。
按住Ctrl进入
可以看到springboot为我们事先准备的插件及版本好依赖等信息,所以我们的SpringBoot工程继承spring-boot-starter-parent后已经具备版本锁定等配置了,所以起步依赖的作用就是进行依赖的传递
3.1.2 spring-boot-starter-web分析
按住Ctrl进入spring-boot-starter-web
可以看到里面定义了一系列web应用用到的jar包坐标,如mvc坐标,tomcat等…这样我们的工程只要引入spring-boot-starter-web起步依赖的坐标就可以进行web开发了,同样体现了依赖传递的作用。
3.2 自动配置原理分析
自动化配置需要从启动类的@SpringBootApplication进入查看
看到一大推元注解
进入@SpringBootConfiguration看到这是一个Spring的配置注解,作用在启动类上,说明启动类是一个配置类
@ComponentScan则是SpringBoot的默认包扫描机制,默认扫描启动类所在的包的同级目录和子包所在的目录。
比较重要的是注解@EnabledAutoConfiguration,作用则是开始自动配置,进入看看
关注上面这个导入的配置类,它有大作为,进入里面观察这个方法
这个方法在于从配置文件中获取到配置类配置的默认信息,这个配置文件在spring.factories,放在
进入发现了这个是一个存放配置类的全限定包名。
假设我们要去查看Tomcat的默认配置
进入spring-configuration-metadata.json查看到默认端口号
最后如果我们需要默认修改项目启动的tomcat端口号,在resource下新建application.properties
日志信息:
访问 http://127.0.0.1:8089/demo/quick
4. SpringBoot配置文件
4.1 SpringBoot配置文件类型
4.1.1 SpringBoot配置文件类型和作用
SpringBoot是基于约定的,所以很多的配置都具有默认值,如果想要用自己的配置替换掉默认的配置,就可以使用application.properties或者application.yml(yaml)进行配置。
SpringBoot启动时,会默认从resources下加载 application.properties或者application.yml(yaml),其中application.properties是键值对类型文件,如下:
除了键值对的配置方式,SpringBoot还提供了yml的配置。
4.1.2 application.yml配置文件
4.1.2.1 yml配置文件简介
YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁。
YML文件的扩展名可以使用.yml或者.yaml。
4.1.2.2 yml配置文件的语法
4.1.2.2.1 普通字符串数据
server:
port: 8085
student:
name: liuzeyu
age: 20
另外之前配置的application.properties端口号是
server.port=8089
项目启动后会使用哪一个?
使用8089,为什么呢?,因为配置文件加载顺序下面的覆盖上面的
如果注释掉application.properties
#server.port=8089
则使用application.yml
4.1.2.2.2 对象数据
语法:
key:
key1: value1
key2: value2
或者:
key: {
key1: value1,key2: value2}
示例代码:
person: # person对象
pid: 350322
pname: liu
addr: fujian
4.1.2.2.3 Map数据
与对象数据写法一样
person: # map对象对象
pid: 350322 # key : value
pname: liu
addr: fujian
4.1.2.2.1 数组(List,Set)数据
语法:
key:
- value1
- value2
或者:
key: [value1,value2]
citys:
-beijing
-tianjing
-xiameng
# citys: [beijing,tianjing,xiameng]
集合对象数据
# 集合对象数据
- name: zhangsan
age: 18
score: 100
- name: lisi
age: 28
score: 88
- name: wangwu
age: 38
score: 90
注意 : - 与value1存在一个空格。
4.1.3 SpringBoot配置信息的查询
SpringBoot的配置文件,主要的目的就是对配置信息进行修改的,但在配置时的key从哪里去查询呢?我们可以查阅SpringBoot的官方文档
查看配置信息官方文档
查用的配置信息摘抄:
# QUARTZ SCHEDULER (QuartzProperties)
spring.quartz.jdbc.initialize-schema=embedded # Database schema initialization mode.
spring.quartz.jdbc.schema=classpath:org/quartz/impl/jdbcjobstore/tables_@@platform@@.sql # Path to the SQL file to use to initialize the database schema.
spring.quartz.job-store-type=memory # Quartz job store type.
spring.quartz.properties.*= # Additional Quartz Scheduler properties.
# ----------------------------------------
# WEB PROPERTIES
# ----------------------------------------
# EMBEDDED SERVER CONFIGURATION (ServerProperties)
server.port=8080 # Server HTTP port.
server.servlet.context-path= # Context path of the application.
server.servlet.path=/ # Path of the main dispatcher servlet.
# HTTP encoding (HttpEncodingProperties)
spring.http.encoding.charset=UTF-8 # Charset of HTTP requests and responses. Added to the "Content-Type" header if not set explicitly.
# JACKSON (JacksonProperties)
spring.jackson.date-format= # Date format string or a fully-qualified date format class name. For instance, `yyyy-MM-dd HH:mm:ss`.
# SPRING MVC (WebMvcProperties)
spring.mvc.servlet.load-on-startup=-1 # Load on startup priority of the dispatcher servlet.
spring.mvc.static-path-pattern=/** # Path pattern used for static resources. spring.mvc.view.prefix= # Spring MVC view prefix. spring.mvc.view.suffix= # Spring MVC view suffix. # DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties) spring.datasource.driver-class-name= # Fully qualified name of the JDBC driver. Auto-detected based on the URL by default. spring.datasource.password= # Login password of the database. spring.datasource.url= # JDBC URL of the database. spring.datasource.username= # Login username of the database. # JEST (Elasticsearch HTTP client) (JestProperties) spring.elasticsearch.jest.password= # Login password. spring.elasticsearch.jest.proxy.host= # Proxy host the HTTP client should use. spring.elasticsearch.jest.proxy.port= # Proxy port the HTTP client should use. spring.elasticsearch.jest.read-timeout=3s # Read timeout. spring.elasticsearch.jest.username= # Login username.
我们可以通过配置application.poperties 或者 application.yml 来修改SpringBoot的默认配置
例如:application.poperties
server.port=8089
server.servlet.context-path=/demo
或者 application.yml
server:
port: 8085
servlet:
context-path: /demo
4.2 配置文件与配置类的属性映射方式
- 注解@Value获取配置文件的
person:
name: liuzeyu
age: 20
controller:
@Controller
public class Quick2Controller {
@Value("${person.name}")
private String name;
@Value("${person.age}")
private Integer age;
@RequestMapping("/quick2")
@ResponseBody
public String quick2(){
return "name:"+name+"age:"+age;
}
}
访问:http://127.0.0.1:8888/demo/quick2
- ConfigurationProperties注解映射
获取配置文件
person:
name: liuzeyu
age: 20
money: 0
controller类:
@ConfigurationProperties("person")
@Controller
public class Quick3Controller {
private String name;
private Integer age;
private Double money;
@RequestMapping("/quick3")
@ResponseBody
public String quick3(){
return "name:"+name+" age:"+age+" money :"+money;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void setMoney(Double money) {
this.money = money;
}
}
访问:http://127.0.0.1:8888/demo/quick3
补充:
添加依赖
<!--spring-boot配置处理器:用于提示代码-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
可以为controller类中提供setter方法后,在yml中的配置可以有提示信息,提高开发效率。
注意:
@Value适用于字段较少的情况下,而@ConfigurationProperties适用于多字段,但是需要提供setter方法和getter方法才能映射成功。
<mark>最后一定要注意yml的书写格式,严格按照第一个key值顶格书写</mark>
4. SpringBoot整合MyBatis
新建工程,采用IDEA快速搭建springboot项目,详细步骤见2.3
4.1 添加MyBatis的起步依赖
<!--添加MyBatis起步依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
4.2 添加数据库驱动坐标
<!--添加数据库驱动坐标-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
4.3 application.properties添加数据库连接信息
#添加数据库连接信息替换原有的约定配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=809080
这些key哪里找到的呢?
打开springboot自动配置的spring-configuration-metadata.json文件
4.4 创建user数据库表
-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('10', 'liuzeyu12a', '809080', 'liuzeyu');
INSERT INTO `user` VALUES ('11', 'zhangsan', '123', 'zhang');
4.5 创建实体类User
public class User {
// 主键
private Long id;
// 用户名
private String username;
// 密码
private String password;
// 姓名
private String name;
//此处省略getter和setter方法 .. ..
}
4.6 创建Mapper接口
@Mapper
public interface UserMappper {
public List<User> queryForList();
}
@Mapper:
- 将UserMappper 接***给spring管理了
- 为这个接口创建一个实现类,让别的类来引用
4.7 配置Mapper映射文件
<?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.liuzeyu.mapper.UserMappper">
<select id="queryForList" resultType="user">
SELECT * from user
</select>
</mapper>
4.8 在application.properties中添加mybatis的信息
#spring集成mybatis环境
#pojo扫描包,取别名
mybatis.type-aliases-package=com.liuzeyu.domain
#加载mybatis映射文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
4.9 controller类的编写
@Controller
public class UserController {
@Autowired
private UserMappper userMappper;
@RequestMapping("queryList")
@ResponseBody
public List<User> queryForUsers(){
return userMappper.queryForList();
}
}
4.10 测试
5. SpringBoot整合Junit
5.1 添加Junit的起步依赖
<!--测试的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
5.2 编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Spring03MybatisApplication.class)
public class MapperTest {
@Autowired
private UserMappper userMappper;
@Test
public void test(){
List<User> users = userMappper.queryForList();
System.out.println(users);
}
}
我们之前spring整合junit在测试类上加的注解是
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
SpringRunner类继承于SpringJUnit4ClassRunner,使用哪一个spring提供的测试引擎都可以
public final class SpringRunner extends SpringJUnit4ClassRunner {
public SpringRunner(Class<?> clazz) throws InitializationError {
super(clazz);
}
}
@SpringBootTest属性传的是引导类的字节码对象,
5.3 控制台打印结果
5.4 优化代码
- 将配置文件接口映射注释掉
#加载mybatis映射文件
# mybatis.mapper-locations=classpath:mapper/*Mapper.xml
- 将SQL语句写在注解里
@Mapper
public interface UserMappper {
@Select("SELECT * from user")
public List<User> queryForList();
}
这时@Mapper还有一个作用也就体现了出来:可以不用写XML配置文件
参考:黑马视频和笔记