MyBatis-Plus 指南
一、简介
MyBatis-Plus(简称 MP)是一款 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,简化开发、提高效率。
二、特性概述
无侵入:只做增强不做改变,引入它不会对现有工程产生影响
损耗小:启动即会自动注入基本 CURD,性能基本无损耗
强大 CRUD 操作:内置通用 Mapper、通用 Service
支持 Lambda 形式调用:通过 Lambda 表达式编写查询条件
支持主键自动生成:支持多达 4 种主键策略
支持 ActiveRecord 模式:实体类只需继承 Model 类即可进行 CRUD
内置代码生成器:可快速生成 Mapper、Model、Service、Controller 层代码
内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作
三、快速入门
1. 添加依赖
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本</version> </dependency>
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<User> { }
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<User> wrapper = new QueryWrapper<>(); wrapper.eq("name", "墨客") .between("age", 20, 40) .like("email", "example"); List<User> users = userMapper.selectList(wrapper);
2. LambdaQueryWrapper 示例
LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>(); lambdaWrapper.eq(User::getName, "墨客") .between(User::getAge, 20, 40) .like(User::getEmail, "example"); List<User> 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<User> page = new Page<>(1, 10); // 当前页,每页大小 QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.eq("age", 30); IPage<User> 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 提供的各种特性。