mybatis 与mybatisplus 比较总结

MyBatis 和 MyBatis-Plus 都是我们常见的数据库持久化框架,它们各有特点和适用场景。

以下是两者的一些介绍、对比总结:

1. 基本概念与关系

  • MyBatis:是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。通过 XML 或注解的方式配置 SQL 语句,将 Java 对象与 SQL 语句执行结果进行映射。
  • MyBatis-Plus (简称 MP):是在 MyBatis 基础上的增强工具,只做增强不做改变,旨在简化开发、提高效率。它完全兼容 MyBatis 的功能,同时提供了更多便捷特性。

2. 核心差异

特性 MyBatis MyBatis-Plus
SQL 编写 需手动编写 XML 或注解 SQL 提供 CRUD 接口,无需编写基础 SQL
条件构造 需手动拼接 SQL 条件 内置 QueryWrapper 等工具,支持链式条件构造,可搭配LambdaQueryWrapper进行使用
代码生成 无内置工具,需借助第三方 内置代码生成器,可生成实体类、Mapper 等
分页功能 需要手动配置分页插件 内置分页插件,开箱即用
主键生成 需手动配置或编码实现 提供多种主键策略(自增、UUID 等)
逻辑删除 需手动编写 SQL 实现 内置逻辑删除功能,通过注解配置
性能分析 无内置支持 提供性能分析插件,可输出 SQL 执行时间

3. 适用场景

  • MyBatis 适用场景:

    • 需要高度定制 SQL(如复杂联表查询、存储过程)
    • 团队熟悉 SQL 优化,希望完全掌控 SQL 执行逻辑
    • 项目对性能有极致要求,需精细调优 SQL
  • MyBatis-Plus 适用场景:

    • 快速开发 CRUD 为主的业务系统
    • 减少重复 SQL 编写,提高开发效率
    • 希望在 MyBatis 基础上获得更多便捷功能
    • 团队希望统一代码风格和开发规范

4. 代码示例对比

MyBatis 实现查询:

java 复制代码
// Mapper 接口
public interface UserMapper {
    User selectById(Long id);
}

// XML 配置
<select id="selectById" resultType="User">
    SELECT * FROM user WHERE id = #{id}
</select>

// 调用
User user = userMapper.selectById(1L);

MyBatis-Plus 实现查询:

java 复制代码
// Mapper 接口(继承 BaseMapper)
public interface UserMapper extends BaseMapper<User> {
    // 无需编写方法,BaseMapper 已提供
}

// 调用(无需 XML 配置)
User user = userMapper.selectById(1L);

条件查询对比(查询年龄等于 18 的用户):

MyBatis 需要手动写 SQL:

xml 复制代码
<select id="selectByAge" resultType="User">
    SELECT * FROM user WHERE age = #{age}
</select>

MyBatis-Plus 可通过条件构造器实现:

java 复制代码
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 18);
List<User> userList = userMapper.selectList(queryWrapper);

可搭配LambdaQueryWrapper进行查询:

ini 复制代码
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getAge, 18);
List<User> userList = userMapper.selectList(queryWrapper);

备注

Mybatis官网

Mybatis-Plus官网

5. 总结建议

  • MyBatis 更灵活,适合需要深度定制 SQL 的场景,但开发效率较低。
  • MyBatis-Plus 在 MyBatis 基础上提供了丰富的增强功能,能大幅减少重复代码,提高开发效率,同时保留了 MyBatis 的灵活性。

实际项目中,推荐使用 MyBatis-Plus,因为它完全兼容 MyBatis,既能享受便捷的 CRUD 操作,又能在需要时编写自定义 SQL,兼顾了效率和灵活性。

相关推荐
资深技术分享员7 小时前
遗留系统——把“改不动的老系统“接过来
java·服务器·数据库
IT_陈寒7 小时前
Python的GIL锁让我把多线程代码全重写了!
前端·人工智能·后端
江湖有缘7 小时前
Docker实战 | 使用Docker部署Bibliotheca阅读习惯管理工具
java·docker·容器
艾莉丝努力练剑7 小时前
【AI大模型接入SDK】ChatSDK:CMake构建静态库完整实现
java·开发语言·网络·c++·人工智能·学习·sdk
百度一下吧7 小时前
umi后台管理项目实战:从工程搭建到生产构建
java·前端·javascript
Joe_Wang57 小时前
【从0到1学习JVM · 14】堆内存各区域分工与Xms和Xmx设为一样的真相
java·jvm·学习·垃圾回收
.道阻且长.7 小时前
C++11 :右值引用的作用,引用折叠和完美转发
java·开发语言·c++
code2cat7 小时前
Java进阶篇之StampedLock:先读取,再校验,必要时退回读锁
java·开发语言
光依旧7 小时前
MCP实战手记(九):生产化MCP Server的6层安全防护
java·人工智能·spring boot·安全·网络安全·ai agent·mcp
阳光九叶草LXGZXJ7 小时前
Linux-学习-12-JDK安装
java·linux·运维·学习