SpringBoot教程(十三) | SpringBoot集成MybatisPlus(持久化框架)
一、MybatisPlus简介
MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
Mybatis-Plus是一个国产框架,有中文的文档,所以使用起来还是很方便的,没有那么大的障碍。
文档地址:https://baomidou.com/introduce/
当前的最新版本是3.5.7
二、涉及常用的注解
在Spring Boot集成mybatis-plus时,出现的常用注解主要来自于几个不同的源头,具体说明如下:
在Spring Boot集成MyBatis-Plus时,出现的常用注解主要来自于两个主要源头:MyBatis-Plus本身和MyBatis(因为MyBatis-Plus是基于MyBatis的增强工具)。以下是具体说明:
MyBatis-Plus提供的注解
@TableName
:用于指定实体类对应的数据库表名。这是MyBatis-Plus特有的注解,用于解决实体类名与数据库表名不一致的问题。@TableId
:用于指定实体类中的主键字段,并可以配置主键的生成策略(如自增、UUID等)。这也是MyBatis-Plus特有的注解,用于增强对主键字段的处理。@TableField
:用于指定实体类中的字段与数据库表中的列之间的映射关系。虽然MyBatis也提供了类似的映射功能,但@TableField
提供了更多的配置选项,如是否更新、是否查询等。@TableLogic
:用于实现逻辑删除,而不是物理删除。当标记了@TableLogic
的字段为特定值时(通常是某个标志位,如1
表示未删除,0
表示已删除),MyBatis-Plus会自动将删除操作转换为更新操作,从而只更新该字段的值,而不是从数据库中删除记录。- 其他MyBatis-Plus特有的注解,如
@Version
用于乐观锁控制等。
MyBatis提供的注解(在MyBatis-Plus中同样适用):
@Select
、@Insert
、@Update
、@Delete
:这些注解用于直接在Mapper接口的方法上指定SQL语句,是MyBatis的核心注解之一。在MyBatis-Plus中,这些注解仍然可以使用,但MyBatis-Plus通过内置的方法提供了大量的CRUD操作,使得开发者在大多数情况下不需要直接使用这些注解。@Param
:用于给方法参数命名,在Mapper接口方法有多个参数时非常有用。MyBatis-Plus中同样支持这个注解。@Results
和@Result
:虽然这些注解在MyBatis-Plus中较少直接使用(因为MyBatis-Plus通过自动映射机制大大简化了结果集的处理),但在某些需要自定义映射规则的场景下仍然可以使用。
MyBatis-Spring-Boot-Starter提供的
mybatis-plus-boot-starter里面集成了MyBatis-Spring-Boot-Starter里面的功能
@Mapper
用途:这是MyBatis-Spring-Boot-Starter提供的一个注解,用于标记Mapper接口,以便Spring Boot能够自动扫描并注册这些Mapper接口为Bean。
但是,从Spring Boot 2.0开始,如果你将Mapper接口放在@MapperScan
注解指定的包或其子包下,那么即使不使用@Mapper
注解,Spring Boot也能够自动扫描到这些Mapper接口。
Spring Boot提供的
@MapperScan
:
用途:这是Spring Boot提供的一个注解,用于指定Mapper接口所在的包路径,以便Spring Boot能够自动扫描并注册这些Mapper接口为Bean。
如果你使用了@Mapper
注解,但仍然希望有一个全局的配置来指定Mapper接口的位置,那么@MapperScan
就非常有用。
三、集成步骤
1. 引入 依赖
<!--mybatis-plus
这个版本需要指定了,因为场景启动器里面没有 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.7</version>
</dependency>
<!-- MyBatis-Plus代码生成器(逆向工程)-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.7</version>
</dependency>
<!-- MyBatis-Plus代码生成器所需引擎
模板引擎来生成代码文件 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
<!-- MySQL JDBC驱动 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!--lombok用来简化实体类-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
上述的依赖中
-
mybatis-plus-boot-starter是核心的应用包
-
mybatis-plus-generator和 freemarker是用来逆向生成的,通过逆向生成的工具类,可以帮助我们生成相应的实体,mapper, service,controller。基本可以实现近乎0代码开发单表的增删改查。
2. 数据源和mybatis-plus配置
数据源配置:
# 数据源的类型
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
# JDBC 驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# JDBC URL
spring.datasource.url=jdbc:mysql://localhost:3306/sharding?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
# 用户名
spring.datasource.username=root
# 密码
spring.datasource.password=root
细节说明:
spring.datasource.type 在 Spring Boot 的配置中,主要指的是数据源的类型,但这个数据源类型往往与数据库连接池紧密相关。在大多数情况下,当我们讨论数据源类型时,我们实际上是在谈论数据库连接池的实现。
- Spring Boot 1.x版本中 默认的数据源类型为Tomcat JDBC连接池
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource - Spring Boot 2.x版本中 默认的数据源类型为HikariCP连接池
spring.datasource.type=com.zaxxer.hikari.HikariDataSource - 现阶段也常用Druid连接池(这个后续有空再说)
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
MyBatis-Plus 配置
# Mapper 文件的扫描路径,可以有多个,支持使用通配符。
#也就是我们写在resources目录里面的xml文件。
mybatis-plus.mapper-locations=classpath*:mapper/**/*.xml
细节说明:
- 推荐使用classpath*前缀以确保资源能够被正确加载,无论它们位于类路径的哪个位置,包括嵌套在JAR文件中的位置
- mapper/**/*.xml
这是最常见和推荐的方法。由于可以匹配零个或多个目录,因此它实际上会包括mapper目录本身及其所有子目录。这意味着,如果你的Mapper XML文件既在mapper目录下也在其子目录中,那么classpath*:mapper/**/*.xml将能够扫描到它们。
2. 开启MyBatisPlus的SQL日志(看需求)
方式 一:
使用 mybatis-plus.configuration.log-impl 配置
值是固定的
mybatis