从零搭建Spring Boot脚手架(3):集成mybatis
< 返回列表时间: 2020-08-06来源:OSCHINA
1. 前言
今天继续搭建我们的 kono Spring Boot 脚手架,上一文集成了一些基础的功能,比如统一返回体、统一异常处理、快速类型转换、参数校验等常用必备功能,并编写了一些单元测试进行验证,今天把国内最流行的 ORM 框架 Mybatis 也集成进去。使用的 Spring Boot 版本为 2.3.2.RELEASE 。 Gitee: https://gitee.com/felord/kono 1.0.0.MYBATIS 分支 GitHub: https://github.com/NotFound403/kono 1.0.0.MYBATIS 分支
2. 集成Mybatis的步骤
集成 Mybatis 的步骤并不是特别复杂,我将它们分为三个步骤,接下来进入正题。
3. 依赖集成
首先我将 Mybatis 的 Starter 加入 kono-dependencies 进行依赖管理,并在 kono-app 引入: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency>

通过 IDEA 的 Maven 插件可以看出我们引入了 Mybatis 的 Starter 之后,高性能的数据源连接池就被集成了进来。但是数据库驱动需要我们自行引入,这里我们直接引用 MySQL 的依赖: <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
4. 配置
配置是最重要的部分,我们来分层次讲解配置。
4.1 先配置数据源
数据源在 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 。
4.2 mybatis配置
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; /** * mybatis configuration. * * @author felord.cn */ @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 文件: <?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="cn.felord.kono.mapper.UserInfoMapper"> <insert id="save" parameterType="cn.felord.kono.entity.UserInfo"> insert into user_info (name, age) VALUES (#{name}, #{age}) </insert> </mapper>
然后测试一下新增成功了没有问题,但是查询的单元测试却没有通过: @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
5. 总结
到这里基本的 mybatis 整合就完成了,你可以从项目仓库拉下来,自己配置一个数据库跑一下。多多关注: 码农小胖哥 继续来和我一起整合脚手架。
关注公众号:Felordcn获取更多资讯
个人博客:https://felord.cn
热门排行