my-batisPlus什么时候用xml什么时候用mapper自带的方法,这两种写法专业一点叫什么,什么场景分别使用

在 MyBatis-Plus 的开发体系中,这两种写法的专业术语通常被称为:

  1. Mapper 自带的方法 :称为通用 CRUD 方法 (或内置方法、零 SQL 开发)。它是通过让 Mapper 接口继承 BaseMapper<T> 获得的。
  2. 使用 XML 的写法 :称为自定义 SQL(或原生 MyBatis XML 映射方式)。它是在 XML 文件中手写 SQL 语句,由框架进行映射。

在实际的企业级开发中,通常遵循 "70% 通用 CRUD + 30% 自定义 SQL" 的混合开发模式。以下是这两种写法的具体使用场景与边界:

一、 什么时候使用 Mapper 自带的方法(通用 CRUD)

核心定位:解决"重复 SQL"的问题,主打单表操作和条件组合,无需手写 SQL。

适用场景:

  1. 单表的基础增删改查 :如根据 ID 查询、新增单条数据、根据主键更新或删除等。这类操作逻辑稳定,使用 BaseMapper 内置方法(如 insert, selectById, updateById)最简洁。
  2. 后台管理系统的列表页 :典型的管理后台接口通常包含"条件查询 + 分页 + 排序 + 可选条件"。使用 LambdaQueryWrapper 进行条件拼接(如 eq, like, between)非常方便,本质上是"拼条件,不拼结构"。
  3. 纯粹的 CRUD 服务层:当 Service 层的职责非常纯粹,只负责数据的进出,不需要理解复杂的业务逻辑时,使用自带方法代码短、维护成本低。
  4. 动态条件查询 :利用 Wrapper 条件构造器,可以根据前端传入的参数动态拼接 WHERE 条件,避免了原生 MyBatis 中繁琐的 <if> 标签拼接。

二、 什么时候使用 XML 手写 SQL

核心定位:解决"复杂 SQL"的问题,提供对数据库操作的绝对控制权。

适用场景:

  1. 多表 JOIN 关联查询:一旦涉及多表关联,字段来源复杂,结果集结构不稳定。如果强行用 Wrapper 拼 JOIN 或子查询,代码会极其难以阅读和调试,此时应回归 XML。
  2. 复杂的统计与报表查询 :当查询的目的不是获取原始数据,而是返回聚合结果(如 GROUP BY 统计、计算字段、返回 VO 对象)时,本质是数据加工,使用 XML 配合 ResultMap 更加清晰。
  3. 需要深度 SQL 优化与索引控制:当进入"数据库工程"层面,需要关心查询是否走索引、JOIN 顺序是否正确、执行计划是否合理时,手写 SQL 是必要的,因为可控性比省代码更重要。
  4. 大批量数据操作 :对于海量数据的批量插入或更新,虽然 MP 提供了 saveBatch,但在极端性能要求下,手写基于 <foreach> 的批量 SQL 性能更好。

三、 总结与判断标准

在健康的项目架构中,两者并非互斥,而是互补的。MyBatis-Plus 完全兼容原生 MyBatis,你可以让 Mapper 接口既继承 BaseMapper,又在 XML 中定义自定义方法,两者混合使用。

一个非常实用的工程化判断标准是:

如果这个 SQL,你愿意直接在数据库客户端里单独执行、调试、优化,那就手写 XML 。

如果这个 SQL 只是单表 CRUD 的一种表达,那就用 Mapper 自带的方法 + Wrapper。

懂工具的边界,把精力留给真正值得手写 SQL 的复杂业务,才是成熟的开发实践。


需要我整理一份 LambdaQueryWrapper 常用条件拼接的速查表吗?比如 eq、like、between 这些该怎么写。

相关推荐
泡海椒11 小时前
JQuick-SQL JQuickTable 模型:XML 动态 SQL 的表封装边界
xml·数据库·sql
supabc12320 小时前
欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则
xml·python·开源·电子发票·1024程序员节
zzu123zsw1 天前
当 GPU 加速渲染遇上无头组件:拆解 Yororen UI 在 GPUI 生态下的状态解耦与 XML 模板实践
xml·ui·rust·gui·gpui
麦序子2 天前
用 pdfplumber + 正则 解析工程量清单 PDF:提取项目编码、综合单价并导出 Excel
xml·pdf·python3.11
ha_lydms4 天前
Xml Functions(XML 函数)
xml·大数据·hadoop·spark·数据处理·dataworks·maxcompute
Eyfcom6 天前
〖实战〗跨境报关单证自动化:XML 报文生成、PDF 套打与单一窗口同步上传的工程实现
xml·pdf·自动化·报关单证·清关自动化
泡海椒8 天前
从 XML 到 Excel:JQuick-Excel 代理与解析器如何协作
xml·excel
流烟默9 天前
Spring Boot 异常响应被序列化为 XML 的排查与修复
xml·spring boot·后端
mmsx9 天前
Android 地图上绘制 KML:解析、样式与渲染
android·xml
不会C语言的男孩9 天前
libxml2 源码编译与 XML 读取验证(x86 / ARM)
xml·c语言·嵌入式