MyBatis-Plus 使用步骤
1. 添加依赖
在 pom.xml
中引入 MyBatis-Plus 相关依赖:
<!-- MyBatis-Plus 核心依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
</dependency>
<!-- MyBatis-Plus 分页插件 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-jsqlparser</artifactId>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
2. 配置数据源和 MyBatis-Plus
在 application.yml
中配置数据库连接信息和 MyBatis-Plus 配置:
spring:
datasource:
# 配置数据库连接信息,使用 MySQL 数据库
url: jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC # 数据库连接地址
driver-class-name: com.mysql.cj.jdbc.Driver # MySQL 驱动类
username: root # 数据库用户名
password: password # 数据库密码
mybatis-plus:
# 配置 MyBatis 的映射文件位置,指定 MyBatis 会在该路径下查找 SQL 映射文件
mapper-locations: classpath:com/xtl/mapper/xml/*.xml
# `mapper-locations` 配置项指定了 MyBatis 映射文件的位置,MyBatis 会扫描这些文件并加载其中定义的 SQL 语句和映射关系。
global-config:
db-config:
# 设置主键生成策略为自增。支持的策略包括:auto(自增)、ASSIGN_ID(雪花算法生成)、UUID(UUID主键)等
# `id-type: auto` 表示数据库主键使用自增策略(通常适用于 MySQL、PostgreSQL 等数据库)
id-type: auto
# 配置逻辑删除字段,`deleted` 为数据库表中标识记录是否已删除的字段
# `logic-delete-field: deleted` 配置指定了逻辑删除的字段名,当使用 MyBatis-Plus 执行删除操作时,
# 它会将该字段值设置为 1,而不是直接从数据库中删除记录。
logic-delete-field: deleted
configuration:
# MyBatis 配置项,配置 MyBatis 的日志实现、枚举类型处理器等行为
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
# 配置 MyBatis 使用 SLF4J 来进行日志输出。`Slf4jImpl` 是 MyBatis 中的 SLF4J 日志实现,
# 它会将日志信息通过 SLF4J 输出,可以方便与 Logback 或 Log4j 等日志框架集成。
default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
# 设置默认的枚举类型处理器,`MybatisEnumTypeHandler` 会将枚举类型与数据库的存储值进行转换。
# 例如,如果数据库存储的是整数值(如 1 表示男,2 表示女),MyBatis 会自动将其映射回枚举类型。
3. 配置 MyBatis-Plus 插件
创建配置类,启用分页插件等:
@Configuration
@MapperScan("com.xtl.mapper") // 扫描 Mapper 接口
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
paginationInnerInterceptor.setOverflow(true); // 页码超出最大页时跳转到首页
paginationInnerInterceptor.setMaxLimit