当前位置: 首页 > news >正文

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

<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 提供的各种特性。

http://www.lryc.cn/news/599609.html

相关文章:

  • 光耦合器:新能源世界的“绿色信使“
  • 全面解析MySQL(3)——CRUD进阶与数据库约束:构建健壮数据系统的基石
  • Krpano 工具如何调节全景图片切割之后的分辨率
  • 代码随想录算法训练营第三十一天
  • 卡尔曼滤波器噪声方差设置对性能影响的仿真研究
  • MATLAB 设置默认启动路径为上次关闭路径的方法
  • 【优选算法】链表
  • 从 SQL Server 到 KingbaseES V9R4C12,一次“无痛”迁移与深度兼容体验实录
  • UG创建的实体橘黄色实体怎么改颜色?
  • 每日算法-数组合并
  • [RPA] Excel中的字典处理
  • ubuntu22.04.4锁定内核应对海光服务器升级内核无法启动问题
  • CPU(中央处理器)和GPU(图形处理器)的区别
  • 在线事务型的业务、实时分析类业务、离线处理类型的业务
  • 如何提高微信小程序的应用速度
  • 代码随想录算法训练营第五十三天|图论part4
  • 基于spring boot的纺织品企业财务管理系统(源码+论文)
  • vue+iview+i18n国际化
  • Qt:qRegisterMetaType函数使用介绍
  • 如何在 FastAPI 中玩转 GraphQL 和 WebSocket 的实时数据推送魔法?
  • 【数据库】AI驱动未来:电科金仓新一代数据库一体机如何重构性能边界?
  • ESP32学习笔记_Peripherals(4)——MCPWM基础使用
  • 内存优化:从堆分配到零拷贝的终极重构
  • IPv6实战指南:从接入到应用
  • 升级的MS2130S USB3.0高清视频采集芯片
  • 服务器安装虚拟机全步骤
  • 每日一道算法题(八)
  • C++实战:数据标准化高效实现
  • Redis 5.0.14安装教程
  • c# openxml 打开加密 的word读取内容