01、背景介绍
在上一篇文章中,我们介绍了利用 Spring Boot JPA 来实现对数据库的访问操作,虽然它在国外广泛流行,但是在国内流行程度远不如 MyBatis。
原因在于,在 ORM 框架中其实还有另一个翘楚,那就是刚刚说到的 MyBatis,它的实现方式与 Spring Boot JPA 完全不同,MyBatis 框架不会帮助用户动态生成 SQL 语句,它把 SQL 的编写工作完全交给了用户,开发者可以像在本地数据库中写 SQL 语句一样快速的完成对数据库表的操作,非常易于新人上手,唯一的缺点就是配置工作量很大,好在有代码生成器,可以帮助开发者减轻不少的开发工作量。
ORM 框架发展至今,只剩下两家了,一个是以Hibernate为代表,开发者可以不用写一句 SQL 就可以轻松完成对数据库的访问操作;另一个是以MyBatis为代表,开发者可以根据自己的业务需求灵活的编写动态 SQL 完成对数据库的访问操作。
总的来说,两者各有特点,如果当前业务所有的业务操作都是单表并且没有很复杂的查询要求,那么采用 Spring Boot JPA 来开发,效率会更高;如果业务很复杂,各表之间经常需要连表查询,那么采用MyBatis来开发会是一个非常好的选择。在企业级系统开发中,因为业务比较复杂,国内采用MyBatis来开发的项目相对比较多些。
今天这篇文章我们就具体来说说如何在 Spring Boot 中整合 MyBatis 完成数据库表的增删改查操作。
02、应用实践
2.1、工程配置
首先,在pom.xml文件中引入mybatis-spring-boot-starter依赖,具体如下:
关于mybatis-spring-boot-starter与Spring Boot的版本对应关系,可以参考如下:
- 1.3.x版本:适用于 MyBatis 3.4+、Java 6+、Spring Boot 1.5
- 2.0.x版本:适用于 MyBatis 3.5+、Java 8+、Spring Boot 2.0/2.1
- 2.1.x版本:适用于 MyBatis 3.5+、Java 8+、Spring Boot 2.1+
本项目采用的是Spring Boot 2.1.0构建,因此选择2.0.0版本。
然后,在application.properties文件中添加数据源信息和相关的MyBatis配置参数,内容如下:
MyBatis支持两种开发模式。
- 第一种:基于注解的配置实现
- 第二种:基于XML的配置实现
下面我们一起来这两种具体的应用方式。
2.2、基于注解的配置实现
基于注解的配置实现,简单的说就是采用注解来开发,具体实现如下。
2.2.1、创建数据库表
首先,mybatis框架不会帮助我们根据实体类自动生成目标数据库表,因此我们需要事先设计好数据库表结构,在此我们以角色表tb_role为例,具体创建命令如下。
2.2.2、编写对应的实体类
2.2.3、编写对应的 Mapper 接口
2.2.4、添加 Mapper 接口扫描路径
默认创建的 Mapper 接口无法被自动加载到 Spring IOC 容器中,因此需要在Application启动类上,添加 Mapper 接口的包扫描路径,可以通过@MapperScan注解来完成注入,具体如下。
2.2.5、单元测试
最后,我们编写单元测试来验证一下内容的正确性,代码如下:
运行单元测试,输出结果如下!
至此,基于注解模式的实现方式已经介绍完毕了。
如果有一定开发经历的同学可能会感觉到,基于注解方式的开发模式虽然简单,但是弊端也很大,假如查询的时候,需要连接的表很多,字段也多,代码可读性就变得很差,因此大多数情况下,开发者会更倾向于选择基于 XML 的配置实现方式开发,原因是它的可读性更高。
2.3、基于XML的配置实现
基于 XML 的配置实现,是一种最常用的开发模式,具体实现如下。
2.3.1、创建数据库表
与上面类似,我们创建一张新表tb_menu来介绍,具体创建命令如下。
2.3.2、编写对应的实体类
2.3.3、编写对应的 Mapper 接口
与上面基于注解的开发模式类似,只是少了注解配置。
2.3.4、创建 XML 映射文件
在src/main/resources/mybatis/mapper目录下创建MenuMapper.xml文件,并与 Mapper 接口建立映射关系,内容如下:
2.3.5、创建 Mybatis 全局配置文件
在src/main/resources/mybatis目录下创建mybatis-config.xml文件,可以全局配置 mybatis 相关属性信息,示例如下:
更多的配置属性,可以参考这篇文章。
2.3.6、添加 Mapper 接口扫描路径
同上,需要在Application启动类上添加 Mapper 接口的包扫描路径,如果已添加,可以忽略。
2.3.7、配置 XML 文件扫描路径
与基于注解的开发模式稍有不同,我们还需要在application.properties文件中配置 Mybatis 相关的 XML 文件扫描目录,否则启动报错,内容如下:
2.3.8、单元测试
最后,我们编写单元测试来验证一下内容的正确性,代码如下:
运行单元测试,输出结果如下!
至此,基于 XML 模式的实现方式已经介绍完毕了。
实际开发过程中,如果不需要自定义全局配置 Mybatis 数据,也可以省掉创建 Mybatis 全局配置文件这一步。
03、小结
本文主要围绕利用 Mybatis 框架来实现对数据库表的快速访问操作,与 Spring Boot JPA 相比,Mybatis 在使用上更加灵活,对数据表的操作就像在本地数据库写 SQL 一样方便,对于业务复杂的查询场景,它比 Spring Boot JPA 要灵活很多。而且可维护性更高。
如果是企业级的 web 项目,推荐采用 Mybatis 框架作为持久层。
04、参考
- https://mybatis.net.cn/