为什么选 MyBatis-Plus
在 Spring Boot 项目里引入 MyBatis-Plus(下称 MP),最大的收益是单表 CRUD 几乎不用手写 SQL,同时保留了 MyBatis 灵活写复杂 SQL 的能力。下面记录几个我在教育系统项目中最常用的实践。
分页插件配置
MP 的分页靠拦截器实现,必须显式注册,否则 PaginationInnerInterceptor 不生效:
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(
new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
之后 Mapper 直接传入 Page 对象即可返回带 total 的分页结果。
条件构造器代替拼 SQL
单表查询用 LambdaQueryWrapper,字段引用走方法引用,重构改名时编译期就能发现问题:
LambdaQueryWrapper<Course> wrapper = new LambdaQueryWrapper<>()
.eq(Course::getStatus, 1)
.like(StringUtils.hasText(keyword), Course::getCourseName, keyword)
.orderByDesc(Course::getCreateDate);
第二个参数带 boolean 条件的写法可以少写很多 if 判断,动态查询非常清爽。
小结
MP 适合"单表自动化 + 复杂 SQL 手写"的分工模式。另外提醒一点:升级版本时注意 QueryWrapper 与分页插件的兼容性变更,建议先在测试环境回归分页接口。