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


相关推荐
侠客行03179 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪9 小时前
深入浅出LangChain4J
java·langchain·llm
剩下了什么10 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
山峰哥11 小时前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
较劲男子汉11 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
老毛肚11 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
java搬砖工-苤-初心不变11 小时前
MySQL 主从复制配置完全指南:从原理到实践
数据库·mysql
风流倜傥唐伯虎11 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Yvonne爱编码12 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚12 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言