企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
MyBatis-Plus (MP) 在原生 MyBatis 的基础上,提供了非常多实用的工具类,极大地简化了业务层(Service)和持久层(Mapper)之外的数据操作。 以下是 MyBatis-Plus 中最常用的 **4 大核心工具类**及其高频方法汇总: ### MyBatis-Plus 常用工具类汇总表 | **工具类** | **核心作用** | **高频方法** | **功能描述** | | --- | --- | --- | --- | | **`Db`** (静态 CRUD) | **不依赖 Service** 直接操作数据库 | `Db.getById(id, Entity.class)` | 根据 ID 查询(静态方法调用) | | | | `Db.list(wrapper)` | 根据条件查询列表 | | | | `Db.saveBatch(list)` | **批量插入**数据(非常实用) | | | | `Db.update(wrapper)` | 链式更新数据 | | **`Wrappers`** | **条件构造器**快速生成 | `Wrappers.lambdaQuery()` | 生成 LambdaQueryWrapper,防误写 | | | | `Wrappers.lambdaUpdate()` | 生成 LambdaUpdateWrapper | | | | `Wrappers.emptyWrapper()` | 获取一个空的条件构造器 | | **`ChainQuery`** | **链式查询** | `ChainQuery.lambdaQuery(mapper)` | 开启链式查询:`.eq().list()` | | **`CollectionUtils`** | **集合增强工具** | `CollectionUtils.isEmpty()` | 判断集合是否为空(类似 Spring 的) | | | | `CollectionUtils.newHashMap()` | 快速创建具有初始容量的 Map | * * * ### 1\. 深度解析:最强工具类 `Db` (静态助手) 这是 MP 3.5.0+ 极力推荐的工具类。它允许你在任何地方(哪怕没有注入 Service)通过静态方式操作数据库,完美解决 **Service 循环注入** 的问题。 **代码演示:** Java ~~~ // 无需 @Autowired 注入 Service,直接一行代码查询 User user = Db.getById(1L, User.class); // 批量保存 List<User> list = new ArrayList<>(); Db.saveBatch(list); ~~~ * * * ### 2\. 链式编程工具 (Chain) MyBatis-Plus 提供了非常优雅的链式调用,让代码读起来像英语句子。 | **类型** | **方法** | **示例** | | --- | --- | --- | | **链式查询** | `lambdaQuery()` | `this.lambdaQuery().eq(User::getName, "张三").list();` | | **链式更新** | `lambdaUpdate()` | `this.lambdaUpdate().set(User::getAge, 18).eq(User::getId, 1).update();` | * * * ### 3\. 条件构造器常用方法汇总表 当你使用 `Wrappers.lambdaQuery()` 时,以下方法是最常用的: | **方法** | **说明** | **SQL 对应** | | --- | --- | --- | | **`.eq()`** | 等于 (Equal) | `=` | | **`.ne()`** | 不等于 (Not Equal) | `<>` | | **`.gt()` / `.ge()`** | 大于 / 大于等于 | `>` / `>=` | | **`.lt()` / `.le()`** | 小于 / 小于等于 | `<` / `<=` | | **`.like()`** | 模糊查询 | `LIKE '%val%'` | | **`.in()`** | 范围查询 | `IN (v1, v2, ...)` | | **`.orderByDesc()`** | 倒序排序 | `ORDER BY column DESC` | | **`.last()`** | 无视规则,直接拼接到 SQL 最后 | `LIMIT 1` | * * * ### 💡 核心开发建议 1. **优先使用 Lambda:** 永远使用 `lambdaQuery()` 或 `LambdaQueryWrapper`,不要使用字符串字段名(如 `"user_id"`),防止数据库字段改名导致代码报错。 2. **避免 Service 循环依赖:** 如果 Service A 需要调用 Service B,同时 Service B 又需要调用 Service A,请直接使用 `Db` 静态工具类打破循环。 3. **批量操作:** 对于超过 10 条的数据操作,务必使用 `saveBatch` 或 `updateBatchById`,MP 内部做了性能优化。