MyBatis-Plus 指南
一、简介
MyBatis-Plus(简称 MP)是一款 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,简化开发、提高效率。
二、特性概述
- 
无侵入:只做增强不做改变,引入它不会对现有工程产生影响
 - 
损耗小:启动即会自动注入基本 CURD,性能基本无损耗
 - 
强大 CRUD 操作:内置通用 Mapper、通用 Service
 - 
支持 Lambda 形式调用:通过 Lambda 表达式编写查询条件
 - 
支持主键自动生成:支持多达 4 种主键策略
 - 
支持 ActiveRecord 模式:实体类只需继承 Model 类即可进行 CRUD
 - 
内置代码生成器:可快速生成 Mapper、Model、Service、Controller 层代码
 - 
内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作
 
三、快速入门
1. 添加依赖
 com.baomidou mybatis-plus-boot-starter 最新版本 
2. 配置数据源
spring: datasource: url: jdbc:mysql://localhost:3306/mp?useSSL=false&useUnicode=true&characterEncoding=utf-8 username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver
3. 创建实体类
@Data @TableName(\"user\") public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; private String email; }
4. 创建Mapper接口
public interface UserMapper extends BaseMapper { }
5. 基本CRUD操作
// 插入 User user = new User(); user.setName(\"墨客\"); user.setAge(30); user.setEmail(\"moke@example.com\"); userMapper.insert(user); // 查询 User user = userMapper.selectById(1L); // 更新 user.setName(\"新墨客\"); userMapper.updateById(user); // 删除 userMapper.deleteById(1L);
四、条件构造器
MyBatis-Plus 提供了强大的条件构造器 QueryWrapper 和 LambdaQueryWrapper。
1. QueryWrapper 示例
QueryWrapper wrapper = new QueryWrapper(); wrapper.eq(\"name\", \"墨客\") .between(\"age\", 20, 40) .like(\"email\", \"example\"); List users = userMapper.selectList(wrapper);
2. LambdaQueryWrapper 示例
LambdaQueryWrapper lambdaWrapper = new LambdaQueryWrapper(); lambdaWrapper.eq(User::getName, \"墨客\") .between(User::getAge, 20, 40) .like(User::getEmail, \"example\"); List users = userMapper.selectList(lambdaWrapper);
五、分页查询
1. 配置分页插件
@Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }
2. 使用分页查询
Page page = new Page(1, 10); // 当前页,每页大小 QueryWrapper wrapper = new QueryWrapper(); wrapper.eq(\"age\", 30); IPage userPage = userMapper.selectPage(page, wrapper);
六、代码生成器
MyBatis-Plus 提供了强大的代码生成器:
public class CodeGenerator { public static void main(String[] args) { AutoGenerator generator = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); gc.setOutputDir(System.getProperty(\"user.dir\") + \"/src/main/java\"); gc.setAuthor(\"墨客\"); gc.setOpen(false); generator.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl(\"jdbc:mysql://localhost:3306/mp?useSSL=false\"); dsc.setDriverName(\"com.mysql.cj.jdbc.Driver\"); dsc.setUsername(\"root\"); dsc.setPassword(\"123456\"); generator.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); pc.setParent(\"com.example.mp\"); generator.setPackageInfo(pc); // 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityLombokModel(true); strategy.setRestControllerStyle(true); strategy.setInclude(\"user\"); // 表名 generator.setStrategy(strategy); generator.execute(); } }
七、高级特性
1. 逻辑删除
配置:
mybatis-plus: global-config: db-config: logic-delete-field: deleted logic-not-delete-value: 0 logic-delete-value: 1
实体类:
@TableLogic private Integer deleted;
2. 自动填充
实现 MetaObjectHandler 接口:
@Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, \"createTime\", LocalDateTime.class, LocalDateTime.now()); } @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, \"updateTime\", LocalDateTime.class, LocalDateTime.now()); } }
实体类:
@TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime;
八、最佳实践
- 
合理使用 Lambda 表达式,提高代码可读性
 - 
复杂查询建议使用 XML 方式
 - 
批量操作使用 Service 层提供的方法
 - 
合理使用缓存提高性能
 - 
生产环境建议关闭 Banner:
mybatis-plus.global-config.banner=false 
九、总结
MyBatis-Plus 作为 MyBatis 的增强工具,极大地简化了开发流程,提高了开发效率。通过本墨客指南,您应该已经掌握了 MyBatis-Plus 的核心功能和用法。在实际开发中,应根据项目需求合理选择使用 MyBatis-Plus 提供的各种特性。


