【Java后端】MyBatis 和 MyBatis-Plus (MP) 的区别

MyBatisMyBatis-Plus (MP) 的区别


一、定位不同

  • MyBatis

    一款优秀的 ORM 框架,主要提供 SQL 映射 功能,需要开发者手写 SQL,并在 XML 或注解中维护映射关系。它强调 SQL 可控,灵活度高,但需要写很多重复的代码。

  • MyBatis-Plus (MP)

    基于 MyBatis 开发的 增强工具 ,在保持 MyBatis 特性的同时,提供了 大量的 CRUD 封装、分页、代码生成器、条件构造器等功能,减少了模板化的 SQL 编写,提升开发效率。


二、主要区别点

对比点 MyBatis MyBatis-Plus
定位 持久层框架 MyBatis 的增强工具
SQL 手写为主,全部需要自己维护 内置通用 CRUD,大部分场景不用写 SQL
DAO 层 Mapper 接口必须写增删改查方法 提供 BaseMapper,继承后自动拥有 CRUD 方法
分页功能 需要自己写分页逻辑或插件 内置分页插件,开箱即用
代码生成 官方无支持 内置代码生成器,可快速生成 Entity、Mapper、Service、Controller
条件构造 需要写动态 SQL 或使用 OGNL 提供 Wrapper 条件构造器,链式调用,简洁优雅
学习曲线 灵活但代码量大,SQL 掌控度高 上手简单,适合快速开发
适用场景 复杂 SQL、多表关联、性能调优 中小型项目、快速迭代、CRUD 占多数场景

三、代码对比示例

MyBatis(传统写法):

java 复制代码
// UserMapper.java
@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectById(Long id);

    @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
    int insert(User user);
}

调用:

java 复制代码
User user = userMapper.selectById(1L);

MyBatis-Plus(简化后):

java 复制代码
// UserMapper.java
@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 继承 BaseMapper 即可,基本的 CRUD 都不用写了
}

调用:

java 复制代码
User user = userMapper.selectById(1L);
userMapper.insert(new User("Tom", 18));

四、总结建议

  • 如果项目里 业务 SQL 较复杂 (比如几十个表关联、大量存储过程),建议用 MyBatis,保持 SQL 的灵活性和可控性。

  • 如果项目里 CRUD 居多、迭代快 ,尤其是中后台管理系统,建议用 MyBatis-Plus,大幅减少重复代码,提高开发效率。

  • 实际上很多团队会 混用:复杂 SQL 用 MyBatis 手写,简单表就交给 MP 的内置方法。


相关推荐
NineData1 小时前
NineData 迁移评估功能正式上线
数据库·dba
怒放吧德德4 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆6 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
NineData6 小时前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
心之语歌8 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
赵渝强老师9 小时前
【赵渝强老师】PostgreSQL中表的碎片
数据库·postgresql
华仔啊9 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang9 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
Ray Liang11 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解11 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端