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


相关推荐
沃尔威武4 小时前
数据库 Sinks(.net8)
数据库·.net·webview
014-code5 小时前
订单超时取消与库存回滚的完整实现(延迟任务 + 状态机)
java·开发语言
Dreamboat¿5 小时前
SQL 注入漏洞
数据库·sql
java1234_小锋6 小时前
Java高频面试题:Springboot的自动配置原理?
java·spring boot·面试
曹牧6 小时前
Oracle数据库中,将JSON字符串转换为多行数据
数据库·oracle·json
被摘下的星星7 小时前
MySQL count()函数的用法
数据库·mysql
末央&7 小时前
【天机论坛】项目环境搭建和数据库设计
java·数据库
徒 花7 小时前
数据库知识复习07
数据库·作业
枫叶落雨2227 小时前
ShardingSphere 介绍
java
素玥7 小时前
实训5 python连接mysql数据库
数据库·python·mysql