Spring Boot 项目中 MyBatis-Plus 的常用实践总结

为什么选 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 与分页插件的兼容性变更,建议先在测试环境回归分页接口。