一、核心概念与优势
- 增强特性
- 通用 CRUD 操作(
BaseMapper
) - 条件构造器(
QueryWrapper
/LambdaQueryWrapper
) - 分页插件(
PaginationInnerInterceptor
) - 代码生成器(
AutoGenerator
) - 逻辑删除、乐观锁、自动填充等企业级功能。
- 通用 CRUD 操作(
二、详细集成步骤
1. 依赖配置
<dependencies>
<!-- Spring Boot 3.x 兼容版本 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.7</version>
<!-- 排除冲突的 MyBatis 依赖 -->
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 显式声明兼容的 MyBatis 版本 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.3</version>
</dependency>
<!-- 数据库驱动(以 MySQL 为例) -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
注意:Spring Boot 3.x 需排除默认 MyBatis 依赖并手动指定兼容版本,避免 ClassNotFoundException
或 API 不匹配。
2. 数据源与配置(application.yml
)
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
configuration:
map-underscore-to-camel-case: true # 开启驼峰映射
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印 SQL 日志
global-config:
db-config:
id-type: auto # 主键自增策略
logic-delete-value: 1 # 逻辑删除值
logic-not-delete-value: 0
关键配置说明:
| 配置项 | 作用 | 默认值 |
|-------------------------------|------------------------------------------|-------------------|
| map-underscore-to-camel-case
| 数据库下划线字段转 Java 驼峰属性 | false
|
| log-impl
| 开发阶段输出 SQL 便于调试 | 无(需手动开启) |
| id-type
| 主键策略(AUTO
/INPUT
/ASSIGN_ID
等) | ASSIGN_ID
|
3. 实体类与 Mapper
// 实体类
@Data
@TableName("user") // 指定表名
public class User {
@TableId(type = IdType.AUTO) // 主键自增
private Long id;
private String name;
@TableField(fill = FieldFill.INSERT) // 插入时自动填充
private LocalDateTime createTime;
}
// Mapper 接口
@Mapper
public interface UserMapper extends BaseMapper<User> {} // 继承通用 CRUD 接口
4. 代码生成器(快速生成 Entity/Mapper/Service)
FastAutoGenerator.create("jdbc:mysql://localhost:3306/test", "root", "123456")
.globalConfig(builder -> builder
.author("YourName")
.outputDir(System.getProperty("user.dir") + "/src/main/java")
)
.packageConfig(builder -> builder
.parent("com.example")
.entity("entity")
.mapper("mapper")
)
.strategyConfig(builder -> builder
.addInclude("user", "order") // 指定生成表
.entityBuilder()
.enableLombok() // 启用 Lombok
)
.execute();
依赖:需添加 mybatis-plus-generator
+ 模板引擎(如 velocity-engine-core
)。
三、高级特性与使用技巧
条件构造器
// Lambda 表达式避免硬编码字段名 LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getName, "John") .between(User::getAge, 20, 30) .orderByDesc(User::getCreateTime); List<User> users = userMapper.selectList(wrapper);
分页插件
@Configuration public class MyBatisConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); // 添加分页插件 return interceptor; } } // 使用分页 Page<User> page = new Page<>(1, 10); // 第1页,每页10条 Page<User> result = userMapper.selectPage(page, null);
自动填充与乐观锁
// 自动填充处理器 @Component public class MetaHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); } } // 乐观锁字段(@Version) public class Product { @Version private Integer version; }
四、常见错误与解决方案
错误现象 | 原因 | 解决方案 |
---|---|---|
No qualifying bean of type 'xxxMapper' |
未扫描到 Mapper | 启动类加 @MapperScan("com.xxx.mapper") 或 Mapper 接口加 @Mapper |
Failed to determine a suitable driver class |
多数据源冲突 | 启动类排除自动配置:@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) |
Method getLanguageDriver not found in MybatisConfiguration |
MyBatis 与 MP 版本冲突 | 显式声明兼容的 MyBatis 版本(如 3.5.16) |
动态数据源下 MyBatis-Plus 配置失效 | 自定义 SqlSessionFactory 未注入配置 |
手动绑定 GlobalConfig 和 MybatisConfiguration |
五、最佳实践与性能优化
依赖管理
- 使用
dependencyManagement
统一管理 MyBatis 与 MP 版本,避免传递依赖冲突。 - 示例:
<dependencyManagement> <dependencies> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.7</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.16</version> </dependency> </dependencies> </dependencyManagement>
- 使用
多数据源配置
- 使用
@DS("slave")
注解切换数据源,需集成dynamic-datasource-spring-boot-starter
。 - 关键配置:
spring: datasource: dynamic: primary: master datasources: master: # 主库配置 slave: # 从库配置
- 使用
SQL 性能优化
- 关闭 MyBatis 一级缓存:
mybatis-plus.configuration.local-cache-scope=statement
。 - 分页插件参数调优:
PaginationInnerInterceptor.setMaxLimit(500L)
避免全表大分页。
- 关闭 MyBatis 一级缓存:
安全防护
- 启用防止全表更新插件:
BlockAttackInnerInterceptor
,避免误操作执行UPDATE
或DELETE
无WHERE
条件的语句。
- 启用防止全表更新插件:
总结:MyBatis-Plus 的核心价值在于简化 CRUD 并增强 MyBatis 功能。重点注意:
- 版本兼容性(Spring Boot 3.x 需 MP ≥3.5.5 + MyBatis ≥3.5.16);
- 代码生成器快速搭建基础结构;
- 条件构造器代替手写 SQL 提升可维护性;
- 多数据源和动态配置需手动注入组件。
按此指南操作可规避 90% 的集成问题,高效实现企业级数据库操作。