MyBatis-Plus (MP) 相对于原生 MyBatis (MB),在微服务项目中提供了大量“开箱即用”的增强功能,简化了以下几个方面的工作。
-
极大的减少了CRUD 的编码工作:
- 原生 MB: 需要为每个实体 (Entity) 手动编写或生成对应的 Mapper 接口方法和 XML 文件中的
insert,selectById,updateById,deleteById等基础 SQL 语句。在微服务中,每个服务都有自己的领域模型,这样会产生很多重复性的 CRUD 代码。 - MP 简化: 只需让实体对应的 Mapper 接口继承
BaseMapper<YourEntity>,MP 自动提供了一套丰富的、覆盖绝大多数单表操作场景的通用 CRUD 方法(如insert,selectById,updateById,delete,selectBatchIds,selectList,selectPage等)。开发过程中我们无需再为这些基础操作编写任何 SQL,极大的减少了每个微服务中数据访问层的代码。
- 原生 MB: 需要为每个实体 (Entity) 手动编写或生成对应的 Mapper 接口方法和 XML 文件中的
-
简化动态条件查询的构建:
- 原生 MB: 复杂的条件查询通常依赖于在 XML 中编写动态 SQL(使用
<if>,<where>,<foreach>等标签),虽然灵活但较为繁琐,且 SQL 与 Java 代码分离。 - MP 简化: 提供了强大的
Wrapper条件构造器(如QueryWrapper,LambdaQueryWrapper)。我们可以在 Java 代码中以面向对象、链式编程的方式构建WHERE条件、排序 (ORDER BY)、选择列 (SELECT) 等,对于常见的动态查询场景,比编写 XML 更直观、更不易出错,并且 Lambda 方式还具有编译期类型检查的优势。这简化了服务内部业务逻辑中构建查询条件的过程。
- 原生 MB: 复杂的条件查询通常依赖于在 XML 中编写动态 SQL(使用
-
简化常用功能的实现 (通过内置插件):
- 原生 MB: 实现分页、逻辑删除、乐观锁、多租户等功能,通常需要引入第三方插件(如 PageHelper)并进行配置,或者在 SQL 或业务逻辑中手动实现。
- MP 简化: 内置了高质量且易于配置的插件(以 Interceptor 形式):
- 分页插件 (
PaginationInnerInterceptor): 无需额外依赖,配置简单,物理分页。 - 乐观锁插件 (
OptimisticLockerInnerInterceptor): 通过@Version注解和插件,轻松实现乐观锁。 - 逻辑删除: 框架层面支持,只需实体字段注解 (
@TableLogic) 和简单配置,生成的 CRUD 方法会自动处理逻辑删除逻辑。 - 多租户插件 (
TenantLineInnerInterceptor): 方便实现基于列的共享 Schema 多租户数据隔离。 - 防止全表更新/删除插件 (
BlockAttackInnerInterceptor): 增加一层安全防护。
- 分页插件 (
- 这些内置插件的标准化和易用性,使得在不同微服务中实现这些通用功能时,配置和用法更加统一、简单。
-
简化配置与注解:
- 原生 MB: 需要配置
mapper-locations,type-aliases-package等。实体与表的映射、主键等需要在 XML 或通过注解配置。 - MP 简化: 继承了 Spring Boot 的自动配置优势,并提供了更丰富的注解(如
@TableName,@TableId,@TableField),使得实体与数据库表结构的映射更加直观和便捷,减少了对 XML 配置的依赖。
- 原生 MB: 需要配置
-
加速项目初始化与开发 (通过代码生成器):
- 原生 MB: 创建 Entity, Mapper 接口, Mapper XML 等文件通常需要手动完成或依赖其他代码生成工具。
- MP 简化: 提供了功能强大的代码生成器 (MyBatis-Plus Code Generator),可以根据数据库表结构快速生成 Entity, Mapper 接口, Mapper XML, Service 接口, Service 实现类,甚至 Controller 的基础代码。在快速搭建新微服务或为现有服务添加新模块时,极大的提高了开发效率。
总结:
在微服务项目中,由于服务数量多,每个服务都需要建立自己的数据访问层,MyBatis-Plus 通过自动化的 CRUD、简化条件构造、内置常用功能插件、优化配置注解以及提供代码生成器,极大的减少了每个服务中重复、繁琐的编码工作量,提高了开发效率,降低了出错的可能性,并有助于在众多服务间保持数据访问层实现方式的一致性。

被折叠的 条评论
为什么被折叠?



