【第四篇】 SpringBoot整合第三方技术
简介
本篇文章将以整合JUnit、MyBatis、MyBatis-Plus、Druid的几个例子来总结SpringBoot项目整合第三方技术的技巧,经过学习本篇文章之后,让你能够在使用SpringBoot整合第三方技术的时候能够更加得心应手。文章内容若存在错误或需改进的地方,欢迎大家指正!若对操作有任何疑问欢迎留言!非常感谢!
目录
插入知识点:纯净SpringBoot项目所具有的依赖
一、SpringBoot整合JUnit
1、引入依赖
2、使用Spring测试类
3、示例
4、注意事项及排除问题
二、SpringBoot整合MyBatis
1、导入依赖坐标
2、配置相关信息
3、示例
4、问题排查
三、SpringBoot整合MyBatis-Plus
1、导入依赖坐标
2、配置相关信息
3、示例
4、注意事项及排除问题
1、提示找不到junit、SpringBootTest等
2、发生异常:SQLSyntaxErrorException: Table 'demo.student' doesn't exist
四、SpringBoot整合Druid
1、导入坐标依赖
2、配置相关信息
3、示例
五、SpringBoot整合第三方技术总结
插入知识点:纯净SpringBoot项目所具有的依赖
在创建SpringBoot项目的时候,若不勾选任何依赖,那么SpringBoot项目将默认导入springboot的启步依赖spring-boot-starter和Spring测试起步依赖spring-boot-starter-test。
一、SpringBoot整合JUnit
1、引入依赖
在创建SpringBoot项目的时候,项目会自动引入Spring测试起步依赖spring-boot-starter-test,而在这个依赖中就已经引入了JUnit的依赖,所以在项目中可以直接使用。
2、使用Spring测试类
在项目创建之后,可以看到有一个test目录和一个与引导类类名相似的类,这个是项目创建的时候自动创建的一个Spring的测试类,点击在这个类可以看到被@SpringBootTest注解所修饰,有了这个注解,在启动这个类里面的测试方法的时候同时也会启动Spring容器,那么在这个类里面就可以使用有关Spring的一切东西。
3、示例
可以看到我在applicattion.yaml文件中自定义配置了端口号,然后在测试类中注入了管理属性源的Environment对象,然后通过getProperty方法成功获取到了配置文件中的配置。
4、注意事项及排除问题
也许会遇到下面这种情况,这种情况是因为test下的包名和类路径java下的包名不一致导致的,也可能是包名一致,但是测试类与Java类不在同一层目录下,而导致测试类找不到配置类或配置文件。原因是测试类会从当前所在包及其父包中寻找@SpringBootConfiguration注解,也会去Java包中的同样的路径下寻找,若没找到就会报下面的错误,可以看到@SpringBootApplication注解中就包含@SpringBootConfiguration注解。
解决办法
通过报错信息可以看到让使用@ContextConfiguration or @SpringBootTest(classes=...)来解决,那么也就是使用这个方法解决的,第一种可以在测试类的上面添加@ContextConfiguration(classes = 启动类类名.class),第二种是直接在@SpringBootTest注解中指定classes属性值为启动类的字节码对象。若测试类所在类路径与启动类完全一致,那么就可以省略classes属性。最常用的是第二种办法,一般不会使用@ContextConfiguration。
二、SpringBoot整合MyBatis
因为MyBatis是持久层框架用于操作数据库,所以前提是需要导入数据库的驱动坐标,并连接数据库。下面也会有操作步骤。
1、导入依赖坐标
在pom种导入mybatis的起步依赖,可以是在创建项目的时候直接勾选导入,也可以在项目中的pom文件中手动导入。并导入数据库驱动依赖坐标。
2、配置相关信息
在配置文件中配置相关技术所需的信息,这里需要配置相关的数据源,也就连接MySQL。
3、示例
(1)创建表对应的实体类
(2)创建Mapper接口
注意这里的Mapper接口需要使用@Mapper注解声明。这里还根据MyBatis写了一个根据ID查询数据的方法,等会就将使用这个方法进行测试。
(3)测试
在测试类中注入StudentMapper,然后调用getById接口,查看数据是否正常返回。
4、问题排查
书写过程中可能会报SQLException,然后提示说The server time zone is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTiemzone' configuration property) ... ...。这种情况,这是因为SpringBoot版本太低或者是MySQL驱动版本太低,导致出现了时区问题,那么只需要修改配置文件中的数据库连接信息即可,在url配置的后面加上
?serverTimezone=Asia/Shanghai 即可。
若提示com.mysql.jdbc.Driver驱动类过时,那么就使用com.mysql.cj.jdbc.Driver即可。
三、SpringBoot整合MyBatis-Plus
前提
MyBatis-Plus是在MyBatis上做的增强,仍然是持久层框架用于操作数据库,所以前提是需要导入数据库的驱动坐标,并连接数据库。下面也会有操作步骤。
1、导入依赖坐标
创建项目的时候,在添加依赖时可以搜索MyBatis-Plus,发现并没有,也就代表当前SpringBoot版本并没有收录MyBatis-Plus。解决办法是直接创建一个纯净的SpringBoot工程,然后去Maven坐标库中查找MyBatis-Plus的坐标,复制粘贴导入即可。
2、配置相关信息
在配置文件中配置相关技术所需的信息,这里需要配置相关的数据源,也就连接MySQL。
3、示例
(1)创建表对应的实体类
(2)创建Mapper接口并继承BaseMapper指定泛型为实体类
注意这里的Mapper接口需要使用@Mapper注解声明且需要继承BaseMapper指定泛型为实体类。
(3)测试
在测试类中注入StudentMapper,然后调用继承的selectById接口,查看数据是否正常返回。
4、注意事项及排除问题
1、提示找不到junit、SpringBootTest等
现象
我在程序运行的时候发现程序运行不了,一直提示程序包org.junit.jupiter.api不存在、程序包org.springframework.boot.test.context不存在、找不到SpringBootTest、找不到com.xbb.SpringbootDemo5ApplicationTests。
原因
发现是我的porject的包设置错了,点击file-Projrect Structure... -Modules可以看到,我是把src包一不小心设置成了Sources,于是就出现了上面的问题。
解决办法
那么只需要将包的类型设置成默认的即可。
2、发生异常:SQLSyntaxErrorException: Table 'demo.student' doesn't exist
现象
运行之后出现下面的异常信息,然后运行失败。
原因
MyBatis会将实体类的类名与表名做映射,如果没有任何配置的话,就会默认类名与表名相同,如果类名和表名不同,就会出现上面找不到表的错误。
解决办法
下面提供两种解决办法,可以按需使用。
第一种:在实体类上面添加@TableName("实际对应表名")注解并指定属性为表名。
第二种:若是因为表名有特殊前缀,那么还可以通过配置文件配置的方式,统一配置前缀即可。但是,类名必须与表名除去前缀之后的部分保持一致,可以忽略大小写。例如表名为user_student,可以设置前缀为user_,那么类名就必须为Student,忽略大小写。
四、SpringBoot整合Druid
前言
Druid 是阿里巴巴开源的高性能数据库连接池工具,具备监控功能、SQL 注入防御能力,性能优于传统连接池,支持多种数据库,并通过 Filter-Chain 插件机制提供扩展性。Spring Boot 2.x 默认采用 HikariCP,它以轻量级、高性能、自动优化和简单可靠著称。两者对比,HikariCP 性能更优,Druid 监控和安全功能更强;Druid 扩展性高但配置复杂,HikariCP 更简单易用;Druid 在中国市场流行,HikariCP 在国际上更受关注。
1、导入坐标依赖
创建项目的时候,在添加依赖时可以搜索druid,发现并没有,也就代表当前SpringBoot版本并没有收录druid。解决办法是直接创建一个纯净的SpringBoot工程,然后去Maven坐标库中查找druid的坐标,复制粘贴导入即可。
2、配置相关信息
(1)第一种配置:在原有的spring.datasource配置的基础上指定type属性
(2)第二种配置:使用druid专属的spring配置(推荐)
3、示例
这里连接数据源的工具还是使用的是MyBatis-Plus,然后下面是示例:
(1)创建表对应的实体类
(2)创建Mapper接口并继承BaseMapper指定泛型为实体类
注意这里的Mapper接口需要使用@Mapper注解声明且需要继承BaseMapper指定泛型为实体类。
(3)测试
在测试类中注入StudentMapper,然后调用继承的selectById接口,查看数据是否正常返回。
五、SpringBoot整合第三方技术总结
经过上述示例之后,我们可以看到SpringBoot整合第三方技术无非就是两步:
- 第一步:导入技术相关依赖
-
- 若该技术被Spring已收录,那么只需要指定groupId和artifactId即可,版本由Spring管理
- 若该技术没有被Spring收录,那么就去Maven坐标库中查询相关坐标,然后导入即可
- 第二部:配置技术需要的配置
-
- 推荐:在配置文件中使用当前技术的专属配置进行配置
通过以上两步即可实现SpringBoot整合第三方技术,那么剩下的就是根据技术的特性进行使用了。