MyBatis-Plus 指南

发布于:2025-07-26 ⋅ 阅读:(18) ⋅ 点赞:(0)

一、简介

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. 添加依赖

<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;

八、最佳实践

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

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

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

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

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

九、总结

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


网站公告

今日签到

点亮在社区的每一天
去签到