【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 的内置方法。


相关推荐
007php00716 小时前
大厂深度面试相关文章:深入探讨底层原理与高性能优化
java·开发语言·git·python·面试·职场和发展·性能优化
qq_3344668616 小时前
excel VBA应用
java·服务器·excel
E_ICEBLUE16 小时前
快速合并 Excel 工作表和文件:Java 实现
java·microsoft·excel
qq_2148032916 小时前
ArcGIS Runtime与GeoTools融合实践:加密SHP文件的完整读写方案
java·安全·arcgis
Juchecar17 小时前
Spring是Java语境下的“最优解”的原因与启示
java·spring·node.js
邪恶喵喵17 小时前
Tomcat和负载均衡
java·tomcat·负载均衡
尼古拉斯·纯情暖男·天真·阿玮17 小时前
动态规划——子序列问题
java·算法·动态规划
代码不停17 小时前
Java中文件操作和IO
java
夏天的味道٥17 小时前
IDEA 开发工具常用插件整理
java·ide·intellij-idea
勇者无畏40417 小时前
基于 Spring AI Alibaba 搭建 Text-To-SQL 智能系统(初始化)
java·后端·spring