MyBatisPlus 的使用
pom 依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--由SpringBoot进行版本管理-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.7</version>
</parent>
<groupId>com.guigu</groupId>
<artifactId>mybatis</artifactId>
<version>1.0</version>
<!--自定义内容, 辅助版本管理-->
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<mybatis-plus-boot-starter.version>3.4.1</mybatis-plus-boot-starter.version>
<swagger-spring-boot-starter.version>1.9.0.RELEASE</swagger-spring-boot-starter.version>
</properties>
<dependencies>
<!--spring套件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus-boot-starter.version}</version>
</dependency>
<!-- Spring Boot 集成 swagger -->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>${swagger-spring-boot-starter.version}</version>
</dependency>
</dependencies>
</project>
配置文件
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8
username: root
password: root
# 用于打印 Mybatis 中的日志信息
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
CURD 操作
插入操作(涉及主键策略)
手动指定策略:INPUT、NONE
手动指定主键id,如果没有指定则插入失败
自动增长策略:AUTO
需要数据库设置了主键自增,否则等同于 INPUT 策略
UUID策略(MyBatisPlus默认):ASSIGN_ID、ASSIGN_UUID
数据库不需要设置主键自增,采用雪花算法分配一个全局唯一的值
ASSIGN_ID
:支持主键为数值或字符串类型ASSIGN_UUID
:主键必须为字符串类型

Redis 生成策略
查询操作
其他常用功能
自动填充
自动填充记录的创建时间和更新时间
实体类中的属性配置
创建一个处理器,分别绑定插入操作和更新操作,执行相应的方法
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; @Component public class MPMetaObjectHandler implements MetaObjectHandler { /** * 使用 Mybatis Plus 进行添加时会执行该方法 * * @param metaObject */ @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createTime", new Date(), metaObject); this.setFieldValByName("updateTime", new Date(), metaObject); } /** * 使用 Mybatis Plus 进行更新时会执行该方法 * * @param metaObject */ @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updateTime", new Date(), metaObject); } }
测试:插入时不需要关心 createTime 和 updateTime 属性的设置
自动填充不仅仅局限于 createTime 和 updateTime 的设置,通过
setFieldValByName
可以设置任意出现的属性值,例如为乐观锁设置初始值
乐观锁
在实体类中进行相应修改
Spring 中注入乐观锁插件对象
@Configuration public class MybatisPlusConfig { /** * Mybatis Plus 乐观锁插件配置 * * @return */ @Bean public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() { return new OptimisticLockerInnerInterceptor(); } }
使用自动填充插件为版本号设置初始值
测试
分页插件(实现分页查询)
在Spring中注入分页查询插件
@Configuration public class MybatisPlusConfig { /** * Mybatis Plus 乐观锁插件配置 * * @return */ @Bean public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() { return new OptimisticLockerInnerInterceptor(); } /** * 分页查询插件, 这里不能使用新版本的, 否则分页插件不生效, 可能是兼容性问题 * * @return */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } }
分页查询测试
@Test public void pageQueryTest() { //SELECT uid AS uIndex,username,password,age,gender AS sex,email,is_delete // FROM user // WHERE is_delete=0 // LIMIT ?,? Page<User> page = new Page<>(2, 3); userMapper.selectPage(page, null); //获取page对象中的封装的所有数据 List<User> users = page.getRecords(); for (User user : users) { System.out.println(user); } System.out.println("page.getTotal() = " + page.getTotal()); }
逻辑删除
配置逻辑删除后,通过 MyBatis Plus 调用删除代码时,不会在数据库中实际删除该数据,而是
实体类修改
测试效果