欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > Mybtis和Mybatis-Plus区别

Mybtis和Mybatis-Plus区别

2025/4/19 7:49:25 来源:https://blog.csdn.net/NingMaoKing/article/details/147305430  浏览:    关键词:Mybtis和Mybatis-Plus区别

MyBatis 和 MyBatis-Plus 是 Java 中常用的持久层框架,MyBatis-Plus 是在 MyBatis 基础上增强的工具包,让开发更便捷、高效。下面是两者主要的区别:


✅ 核心区别总结:

特性MyBatisMyBatis-Plus
配置复杂度需要手写大量 XML 或注解极简配置,自动生成 SQL
CRUD 操作手写 Mapper 方法 + SQL内置通用 CRUD 方法
分页功能需要手写分页逻辑或第三方插件内置分页插件,开箱即用
条件构造器无,需要手写 where 条件内置 Lambda 条件构造器
代码生成提供代码生成器(Code Generator)
主键策略需要手动配置内置多种主键生成策略
乐观锁自己实现提供内置乐观锁插件
审计字段(如创建时间、修改时间)自行维护提供自动填充功能
性能分析需要额外工具内置 SQL 性能分析插件
兼容性灵活、手动控制高完全兼容 MyBatis,可随时退回

🧩 1. 配置复杂度

✅ MyBatis:
  • 需要创建 Mapper 接口 + Mapper.xml 文件

  • SQL 都需要手动写,配置较繁琐

  • 实体类、字段和表结构需要手动映射(resultMap 或 @Results)

<!-- MyBatis 的 select 示例 -->
<select id="selectById" resultType="User">SELECT * FROM user WHERE id = #{id}
</select>
✅ MyBatis-Plus:
  • 只需配置数据库连接、扫描 Mapper 包

  • 不需要写 XML,自动完成 SQL 拼接

  • 实体类字段与表字段名称一致可自动映射

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

🧩 2. CRUD 操作

✅ MyBatis:
  • 所有 CRUD 方法都需要手写

  • 如果实体类字段多,SQL 写起来冗长,易出错

✅ MyBatis-Plus:
  • 提供 BaseMapper<T>,自动拥有 20+ 个通用 CRUD 方法

  • 例如:

    • selectById, insert, updateById, deleteById

    • 批量插入、分页查询、条件查询等也支持

userMapper.insert(user); // 自动生成 insert SQL

🧩 3. 分页功能

✅ MyBatis:
  • 需要自己拼接分页 SQL(LIMIT/OFFSET)

  • 或接入第三方分页插件如 PageHelper

✅ MyBatis-Plus:
  • 提供 分页插件,配置一次后,使用非常方便

  • 统一使用 Page<T> 对象传参

Page<User> page = new Page<>(1, 10); // 页码1,每页10条
Page<User> result = userMapper.selectPage(page, null);

🧩 4. 条件构造器

✅ MyBatis:
  • 条件查询时需要手写 SQL 中的 where 子句
✅ MyBatis-Plus:
  • 提供 QueryWrapperLambdaQueryWrapper

  • 可链式编程、支持条件组合、动态拼接

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getAge, 20).like(User::getName, "张");
List<User> users = userMapper.selectList(wrapper);

🧩 5. 代码生成

✅ MyBatis:
  • 没有自带代码生成工具,通常需要借助 MyBatis Generator 插件,且配置复杂
✅ MyBatis-Plus:
  • 自带 Code Generator,支持通过数据库自动生成:

    • 实体类、Mapper 接口、XML、Service、Controller 等
// 快速生成一整套文件,只需配置数据库和模板路径
AutoGenerator generator = new AutoGenerator();
// 配置略...
generator.execute();

🧩 6. 主键策略

✅ MyBatis:
  • 插入数据时需要手动指定主键或配置主键返回策略(如 useGeneratedKeys)
✅ MyBatis-Plus:
  • 支持多种主键生成方式:

    • 自增、UUID、雪花算法(默认使用雪花)
  • 只需在实体类中加注解即可

@TableId(type = IdType.ASSIGN_ID) // 使用雪花算法生成主键
private Long id;

🧩 7. 乐观锁

✅ MyBatis:
  • 需要手动实现版本字段逻辑和 SQL 拼接
✅ MyBatis-Plus:
  • 提供内置插件支持乐观锁,自动对 version 字段进行比较和更新
@Version
private Integer version; // 更新时会自动加入 version=... 的判断

🧩 8. 审计字段(创建时间、修改时间)

✅ MyBatis:
  • 需要手动在 insert/update 语句中维护 createTime, updateTime
✅ MyBatis-Plus:
  • 提供自动填充功能,支持插入/更新时自动填充字段
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
  • 需要配置 MetaObjectHandler,一次性设置全局规则

🧩 9. 性能分析

✅ MyBatis:
  • 需要自己接入日志框架或 SQL 监控工具(如 P6Spy)
✅ MyBatis-Plus:
  • 内置 SQL 执行分析插件(dev/test 环境下很实用)
// 开启性能分析插件
interceptor.addInnerInterceptor(new PerformanceInterceptor());

🧩 10. 兼容性

✅ MyBatis:
  • 灵活度高,自由度大,但需要手动控制 SQL
✅ MyBatis-Plus:
  • 100% 兼容原生 MyBatis

  • 可以只使用通用功能,特殊需求时照样写 XML、注解 SQL


🚀 使用场景建议:

  • MyBatis:适合 SQL 极度复杂、强定制化的项目,想完全控制 SQL。

  • MyBatis-Plus:适合大多数通用业务,追求开发效率、简洁的项目,尤其适合中后台管理系统。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词