Springboot 系列(十一)使用 Mybatis(自动生成插件) 访问数据库
1. Springboot mybatis 介绍
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数获取结果集的过程。MyBatis 可以使用简单的 XML
或注解
来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
关于 Mybatis 的基础知识可以查询官方文档,十分的详细。mybatis 官方文档.
2. Springboot mybatis 依赖
本系列 Springboot 文章主要是 Springboot 的学习与分析,也因此只会试验 Mybatis 在 Springboot 中的一些用法,关于 Mybatis 的基础知识,还是需要自行学习的。
创建 Springboot 项目不提,引入 maven 依赖,主要是 mybastis 核心依赖以及一个 mybatis mapper 自动生成插件。依赖中的 druid 数据源部分,可以参考系列文章第九篇。
1 | <dependencies> |
3. Springboot mybatis 配置
关于 Druid 数据源的配置不再说明,可以参考系列文章第九篇。配置中主要配置了项目编码、数据源信息、durid 数据源和 mybatis 的 mapper 位置以及 mybatis 映射别名的包路径。
1 | ############################################################ |
4. Springboot mybatis 编码
mybatis 是半 ORM 框架,它通过 XML 描述符或者注解把 POJO 对象与 SQL 信息关联起来,也因为是和 SQL 关联起来,使用 mybatis 可以充分的利用数据的各种功能以及强大的 SQL 语句。也可以发发现使用 mybatis 至少应该建立 POJO 对象和 SQL 关联信息以及编写相关操作代码。
4.1. 数据库准备
既然是持久层框架,先准备一个用于实验操作的数据表。上一个步骤中有配置数据库信息为 springboot。
1 | jdbc:mysql://127.0.0.1:3306/springboot = |
因此在 mysql 数据库的 springboot 库中创建表 book 用于演示。
1 | CREATE TABLE `book` ( |
增加测试数据。
1 | INSERT INTO `springboot`.`book`(`id`, `author`, `name`, `price`, `create_time`, `description`) VALUES (2, '金庸', '笑傲江湖', 12, '2018-09-01 10:10:12', '是作家金庸创作的一部长篇武侠小说'); |
4.2. 自动生成插件
传统的 mybatis 开发过程需要依照数据表新建大量的 POJO 类,然后在编写响应的增删改查接口,继而编写增删改查对应的 XML 文件。过程无趣且有重复劳动,因此产生了一个自动生成工具,可以通过 JDBC 连接到数据库,自动的创建 POJO、操作接口、XML 文件。
在引入依赖的时候已经引入了自动生成插件,也就是 mybatis-generator-core
。
接着在项目根目录下创建自动生成配置文件,主要配置数据库信息和要生成的表已经生成的代码存放位置。
在之前作者也介绍过,可以参考博客文章使用MyBatis Generator自动生成Model、Dao、Mapper相关代码。
1 |
|
写好配置文件之后,还需要写一个启动程序,用于加载配置文件,运行就可以生成相关配置。
1 | import org.mybatis.generator.api.MyBatisGenerator; |
生成的文件如下图。
查看生成的接口以及 XML 映射文件可以发现已经自动生成了常用的几个方法。
- deleteByPrimaryKey
- insert
- updateByPrimaryKey
- selectByPrimaryKey
- selectAll
生成完成之后要在 Springboot 启动器上添加 MapperScan 注解指定要扫描的 mapper 位置。
1 |
|
4.3. 注解配置方式
Mybatis 同样支持注解的方式配置映射关系,使用注解可以替代 XML 的配置,写一个简单的注解例子。在刚才生成的 BookMapper.java 中增加一个根据作者名称查询的方法,并映射字段对应的属性。
1 | // 添加 @Repository 注解,这样在使用 @Autowired 引入的时候不会报横线 |
5. Springboot mybatis 测试
正常情况下会在项目中的业务层 service 包下创建接口和类然后通过注解引入使用。
1 |
|
我们只是实验,没有这样写一套的必要,只要能确保 BookMapper 可以正常注入使用就好了。因此创建测试类进行测试。
在生成的(也可以完全手写测试方法)测试类中添加测试方法进行测试。
1 |
|
为了观察查询接口 book 的信息输出,重写 Book 类的 toString 方法,然后运行单元测试。
可以发现测试全部通过。结果正常。
文章代码已经上传到 Github Spring Boot 连接数据库 - Mybatis。
最后的话
文章有帮助可以点个「赞」或「分享」,都是支持,我都喜欢!
文章每周持续更新,要实时关注我更新的文章以及分享的干货,可以关注「 未读代码 」公众号或者我的博客。