🚀 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
  • 公众号:默语摸鱼

📢 加入默语共创社群矩阵
和一群优秀的技术人一起探索科技未来,共同成长 🚀

👉 点击此处,加入核心学习团队

更多推荐