MyBatis-Plus 实战详解:优雅玩转 CRUD 和 Lambda 条件构造器
在传统 MyBatis 开发中,大量重复的 Mapper XML 和样板代码一度让开发者“心力交瘁”。为了解放双手、提升开发效率,MyBatis-Plus(简称 MP)横空出世。它为我们提供了开箱即用的 CRUD 接口,并支持类型安全的 Lambda 查询构造器,极大提升了代码的可读性与可维护性。继承、baseMapper调用、的灵活组合使用。简化 CRUD 操作减少 XML 编写提升开发效率My
🚀 MyBatis-Plus 实战详解:优雅玩转 CRUD 和 Lambda 条件构造器
✍️ 作者:默语 | 微信:Solitudemind
📬 公众号:默语摸鱼

🧭 摘要
在传统 MyBatis 开发中,大量重复的 Mapper XML 和样板代码 一度让开发者“心力交瘁”。为了解放双手、提升开发效率,MyBatis-Plus(简称 MP) 横空出世。它为我们提供了 开箱即用的 CRUD 接口,并支持 类型安全的 Lambda 查询构造器,极大提升了代码的可读性与可维护性。
本文将结合项目实战,手把手带你理解 MyBatis-Plus 中的几个核心能力:ServiceImpl 继承、baseMapper 调用、LambdaQueryWrapper 的灵活组合使用。
🧱 1. MyBatis-Plus 简介
MyBatis-Plus 是基于 MyBatis 的增强工具包,核心目标是:
- 简化 CRUD 操作
- 减少 XML 编写
- 提升开发效率
✨ 主要特性
- 通用 Service 层接口与实现
- 自动分页
- 条件构造器(支持 Lambda)
- 内置代码生成器
🧩 2. ServiceImpl:让 CRUD 简单优雅
在 MP 中,你无需重复编写通用增删改查逻辑,只需让你的业务实现类继承 ServiceImpl<M, T> 即可。
✅ 示例代码
@Service
public class BjcyGdxxCfsqServiceImpl
extends ServiceImpl<BjcyGdxxCfsqMapper, BjcyGdxxCfsq>
implements IBjcyGdxxCfsqService {
// 你可以直接使用 this.save()、this.list()、this.removeById() 等方法
}
✅ 参数说明:
M:Mapper 接口类型T:实体类类型
你不再需要为每个实体手写大量 Service 层逻辑,MyBatis-Plus 帮你搞定了大部分 CRUD 操作!
🧰 3. baseMapper:直接操作数据库的桥梁
当你需要更复杂的 SQL 查询时,可以直接使用 MyBatis-Plus 自动注入的 baseMapper 来调用原生 Mapper 接口的方法。
✅ 使用示例:
// BjcyGdxxCfsqServiceImpl 中
@Autowired
private BjcyGdxxCfsqMapper baseMapper;
// 查询所有满足条件的记录
List<BjcyGdxxCfsq> list = baseMapper.selectList(new QueryWrapper<>());
你可以结合 QueryWrapper / LambdaQueryWrapper 构建 SQL 条件查询。
🔍 4. LambdaQueryWrapper:类型安全的查询构造器
相比传统的字符串拼接,MyBatis-Plus 提供的 LambdaQueryWrapper 使用 Java 方法引用的形式来构建 SQL 条件,类型安全、IDE 支持自动提示、重构不易出错。
🧪 示例代码片段
LambdaQueryWrapper<BjcyGdxxCfsq> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper
.eq(BjcyGdxxCfsq::getCallingNumber, rows.getCallingNumber()) // WHERE calling_number = ?
.in(BjcyGdxxCfsq::getCustNo, custNoS) // AND cust_no IN (...)
.notLike(BjcyGdxxCfsq::getBusType, "测试") // AND bus_type NOT LIKE '%测试%'
.ge(BjcyGdxxCfsq::getSrvBegTime, someDate); // AND srv_beg_time >= ?
// 执行查询
List<BjcyGdxxCfsq> results = baseMapper.selectList(queryWrapper);
🧠 方法说明:
| 方法 | 作用 |
|---|---|
eq |
等值查询 |
in |
IN 查询 |
notLike |
模糊排除查询 |
ge |
大于等于(>=) |
🚧 实战 Tips
LambdaQueryWrapper可以链式调用,也可以动态构建(适合多条件组合);- 不推荐在 Controller 中直接使用
baseMapper,建议封装到 ServiceImpl 中; - 如果需要分页,可以结合
Page<T>使用baseMapper.selectPage()。
✅ 分页示例
Page<BjcyGdxxCfsq> page = new Page<>(1, 10); // 页码1,每页10条
IPage<BjcyGdxxCfsq> pagedResult = baseMapper.selectPage(page, queryWrapper);
🧪 延伸阅读:通用方法一览
| 方法名 | 作用 |
|---|---|
save(entity) |
插入一条记录 |
saveBatch(list) |
批量插入 |
getById(id) |
根据 ID 查询 |
list() |
查询所有记录 |
removeById(id) |
删除记录 |
updateById(entity) |
更新记录 |
这些方法都由 ServiceImpl 提供,无需手写 SQL 或 XML,开发效率直线上升 🚀!
🧩 项目结构建议
src/
└── com.example.project/
├── entity/
│ └── BjcyGdxxCfsq.java
├── mapper/
│ └── BjcyGdxxCfsqMapper.java
├── service/
│ └── IBjcyGdxxCfsqService.java
└── service/impl/
└── BjcyGdxxCfsqServiceImpl.java
🧠 总结
MyBatis-Plus 极大简化了 Java 项目的数据库操作流程,通过继承 ServiceImpl、使用 baseMapper、结合 LambdaQueryWrapper,我们可以用最少的代码实现强大的数据查询能力。特别是 Lambda 风格的条件构造器,既安全又优雅,是每个现代 Java 开发者都应该掌握的技能。
📎 参考链接
- 官方文档:https://baomidou.com/
- GitHub:https://github.com/baomidou/mybatis-plus
- Lambda 表达式语法参考:https://www.runoob.com/java/java8-lambda-expressions.html
📮 联系方式
- 微信:Solitudemind
- 公众号:默语摸鱼
📢 加入默语共创社群矩阵
和一群优秀的技术人一起探索科技未来,共同成长 🚀
更多推荐




所有评论(0)