> 技术文档 > MyBatis-Plus 指南

MyBatis-Plus 指南


一、简介

MyBatis-Plus(简称 MP)是一款 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,简化开发、提高效率。

二、特性概述

  1. ​无侵入​​:只做增强不做改变,引入它不会对现有工程产生影响

  2. ​损耗小​​:启动即会自动注入基本 CURD,性能基本无损耗

  3. ​强大 CRUD 操作​​:内置通用 Mapper、通用 Service

  4. ​支持 Lambda 形式调用​​:通过 Lambda 表达式编写查询条件

  5. ​支持主键自动生成​​:支持多达 4 种主键策略

  6. ​支持 ActiveRecord 模式​​:实体类只需继承 Model 类即可进行 CRUD

  7. ​内置代码生成器​​:可快速生成 Mapper、Model、Service、Controller 层代码

  8. ​内置分页插件​​:基于 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;

八、最佳实践

  1. 合理使用 Lambda 表达式,提高代码可读性

  2. 复杂查询建议使用 XML 方式

  3. 批量操作使用 Service 层提供的方法

  4. 合理使用缓存提高性能

  5. 生产环境建议关闭 Banner:mybatis-plus.global-config.banner=false

九、总结

MyBatis-Plus 作为 MyBatis 的增强工具,极大地简化了开发流程,提高了开发效率。通过本墨客指南,您应该已经掌握了 MyBatis-Plus 的核心功能和用法。在实际开发中,应根据项目需求合理选择使用 MyBatis-Plus 提供的各种特性。