继续搭建我们的kono Spring Boot脚手架,上一文集成了一些基础的功能,比如统一返回体、统一异常处理、快速类型转换、参数校验等常用必备功能,并编写了一些单元测试进行验证,今天把国内流行的ORM框架Mybatis也集成进去。使用的Spring Boot版本为2.3.2.RELEASE。
集成Mybatis的步骤并不是特别复杂,我将它们分为三个步骤,接下来进入正题。
首先我将Mybatis的Starter加入kono-dependencies进行依赖管理,并在kono-app引入:
org.mybatis.spring.boot
mybatis-spring-boot-starter
通过IDEA的Maven插件可以看出我们引入了Mybatis的Starter之后,高性能的数据源连接池就被集成了进来。但是数据库驱动需要我们自行引入,这里我们直接引用MySQL的依赖:
mysql
mysql-connector-java
配置是最重要的部分,我们来分层次讲解配置。
数据源在application.yml
中的配置前缀为spring.datasource
。那么基本的配置如下:
spring:
datasource:
# 连接池实现的限定名,这里使用hikari连接池。一般不用配置这个,会自动去类路径下加载,这是一个可选的配置。
# type: com.zaxxer.hikari.HikariDataSource
# 数据库的驱动JDBC驱动程序的类全限定名,它其实会根据下面的url配置自动检测,这是一个可选配置。
# driver-class-name: com.mysql.cj.jdbc.Driver
# 数据库的JDBC链接
url: jdbc:mysql://ip:port/database
# 数据库用户名
username:
# 数据库密码
password:
hikari连接池的配置可以根据需要自行通过spring.datasource.hikari
进行配置,这里先采用默认,后续如果有需要再进行修改。
com.mysql.jdbc.Driver
已经标记为过时,现在请使用com.mysql.cj.jdbc.Driver
。
mybatis的基本配置也不是特别多,你只需要让Mybatis知道从哪里加载你定义的Mapper
接口,从哪里加载对应的*Mapper.xml
文件,然后配置一些mybatis的特性,复杂的骚操作可以从我以往mybatis相关的文章去看一下。
我新建了一张表user_info
,并创建了对应的实体类UserInfo
,接着就是定义Mapper接口的位置。假如说我把所有的Mapper接口放在cn.felord.kono.mapper
包下,那么就应该使用@MapperScan
来标识这个路径,引导mybatis找到这些Mapper接口。
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
/**
*/
@MapperScan("cn.felord.kono.mapper")
@Configuration
public class MybatisConfiguration {
}
接着我们编写UserInfo
对应的UserInfoMapper
接口,并增加一个新增方法。这里可以根据IDE去插件市场下载一些mybatis插件来方便我们开发,关键字搜索mybatis即可,这里我随便找了一个插件安装。通过IDEA的ALT+ENTER快捷键调出了一个生成UserInfoMapper
对应XML的菜单,我们可以使用它来生成XML文件以及对应方法的语句。
XML文件的位置我们放在resources下的mapper文件夹中,编译后就是类路径下的mapper文件夹中,所以需要在application.yml
进行如下配置。
mybatis:
mapper-locations: classpath:mapper/*Mapper.xml
对应的UserInfoMapper.xml
文件:
insert into user_info (name, age)
VALUES (#{name}, #{age})
然后测试一下新增成功了没有问题,但是查询的单元测试却没有通过:
@Test
void testUserInfoMapperFindById(){
UserInfo userInfo = userInfoMapper.findById(3);
System.out.println("userInfo = " + userInfo);
Assertions.assertEquals(3,userInfo.getUserId());
}
这是因为驼峰转下划线的问题造成了,user_id
无法注入到userId
中,所以要声明以下配置来支持下划线转驼峰就可以了:
mybatis:
configuration:
map-underscore-to-camel-case: true
如何打印SQL语句呢?只需要声明Mapper接口包的日志级别为DEBUG
就可以了。
logging:
level:
cn.felord.kono.mapper: debug
到这里基本的mybatis整合就完成了,你可以从项目仓库拉下来,自己配置一个数据库跑一下。
只要一步一个脚印,水滴石穿,吃透、搞懂、拿捏住是完全没有问题的!看到这里的都是妥妥的铁粉无疑了,底下是交流群找到的可是有大把源码,学习路线思维导图啥的,多的我就不透露,124388967看大家自己的积极性了啊,热爱所热爱的, 学习伴随终生