当前位置: 首页 > article >正文

MyBatis 与 MyBatis-Plus 的区别

MyBatis 和 MyBatis-Plus 都是用于简化 Java 应用程序与数据库交互的持久层框架,但它们在功能、易用性和性能优化方面存在显著差异。下面将详细介绍两者之间的区别,并通过具体的代码示例进行对比。


概述
  • MyBatis:作为一款经典的持久层框架,MyBatis 提供了灵活的手动映射方式,允许开发者完全控制 SQL 语句和结果映射过程。
  • MyBatis-Plus:它是基于 MyBatis 的增强工具集,旨在减少开发者的重复性工作,提供了更多的自动化功能和便捷的操作方法。

主要区别
功能扩展
  • MyBatis
    • 主要关注于提供基础的 ORM(对象关系映射)能力,要求开发者自行编写 SQL 语句、配置 XML 映射文件或使用注解。
  • MyBatis-Plus
    • 在 MyBatis 基础上增加了诸如自动分页、条件构造器、代码生成器等功能,极大地方便了 CRUD 操作和其他常用业务逻辑的实现。
开发效率
  • MyBatis
    • 需要较多的手动编码来定义映射关系和 SQL 语句,对于简单的 CRUD 操作可能显得冗长且容易出错。
  • MyBatis-Plus
    • 提供了丰富的内置接口和简便的方法调用,减少了大量重复代码,提高了开发速度和维护性。
性能优化
  • MyBatis
    • 性能取决于开发者编写的 SQL 质量以及如何利用缓存等特性。
  • MyBatis-Plus
    • 内置了一些性能优化措施,如智能查询优化、批量插入/更新支持等,默认情况下能够更好地处理大数据集。
社区支持与文档
  • MyBatis
    • 拥有庞大的用户群体和活跃的社区,官方文档详尽,有大量的第三方资源可供参考。
  • MyBatis-Plus
    • 相对年轻,但在国内开发者中迅速崛起,拥有良好的中文文档和支持论坛。

代码示例对比

假设我们有一个名为 User 的实体类及其对应的数据库表 users,接下来展示如何使用 MyBatis 和 MyBatis-Plus 分别实现基本的 CRUD 操作。

1. 使用 MyBatis 实现
①创建 Mapper 接口
public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User selectById(Long id);

    @Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")
    int insert(User user);

    @Update("UPDATE users SET name=#{name}, age=#{age} WHERE id=#{id}")
    int update(User user);

    @Delete("DELETE FROM users WHERE id=#{id}")
    int deleteById(Long id);
}
②配置 XML 文件(可选)

如果选择不使用注解,则需要创建相应的 XML 文件来进行 SQL 映射:

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectById" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    
    <!-- 其他 CRUD 方法省略 -->
</mapper>
2.  使用 MyBatis-Plus 实现
①继承 BaseMapper 接口

MyBatis-Plus 提供了一个 BaseMapper 接口,它已经包含了所有常用的 CRUD 方法,因此只需继承即可获得这些功能:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface UserMapper extends BaseMapper<User> {
    // 自定义方法可以在此添加
}
②使用 Wrapper 条件构造器

MyBatis-Plus 提供了 QueryWrapperUpdateWrapper 等工具类来简化查询条件的构建:

// 查询单个用户
User user = userMapper.selectById(id);

// 更新用户信息
userMapper.update(new UpdateWrapper<User>()
        .eq("id", id)
        .set("name", "newName")
        .set("age", 25));

// 删除用户
userMapper.deleteById(id);

// 批量操作
List<User> userList = ...; // 用户列表
userMapper.insertBatch(userList); // 批量插入
userMapper.deleteBatchIds(Arrays.asList(1L, 2L, 3L)); // 批量删除
代码生成器
  • MyBatis:需要手动编写或借助其他插件生成代码。
  • MyBatis-Plus:自带强大的代码生成器,可以根据数据库表结构自动生成实体类、Mapper 接口及相关 XML 文件。

总结

从上述分析可以看出,MyBatis 和 MyBatis-Plus 各有优势:

  • 如果你追求极致的灵活性和对 SQL 的完全掌控,那么 MyBatis 可能更适合你。
  • 对于希望快速开发并减少重复劳动的应用场景,MyBatis-Plus 提供了更多开箱即用的功能,降低了开发成本,提升了生产力。

选择哪一个框架取决于项目的需求和个人偏好。无论选用哪个框架,理解其核心概念和技术细节都是成功应用的关键。


http://www.kler.cn/a/468999.html

相关文章:

  • jenkins入门7 --发送邮件1
  • 生信技能69 - 使用deepvariant进行对基因组指定区域Calling SNPs/Indels
  • RedisTemplate执行lua脚本及Lua 脚本语言详解
  • 【微服务与K8S】
  • 小程序组件 —— 28 组件案例 - 推荐商品区域 - 实现结构样式
  • 学习threejs,导入AWD格式的模型
  • Mapper XML 文件纳入 classpath 的解决方案
  • SocraticLM: Exploring Socratic Personalized Teaching with Large Language Models
  • 党员学习交流平台
  • Ae 效果详解:放大
  • springboot565企业车辆管理系统设计与实现(论文+源码)_kaic
  • Flink系列知识讲解之:深入了解 Flink 的网络协议栈
  • python学opencv|读取图像(二十六)使用cv2.putText()绘制文字进阶-在图像上写文字
  • AI定义汽车/跨域融合/整车智能,汽车智能化2.0时代新机会来了
  • Spring Boot 3 配置大全系列 —— 如何配置用户的登录与认证?
  • (转)rabbitmq怎么保证消息不丢失?
  • CPU过剩是什么意思? 有什么对电脑的影响吗?如何确认CPU有没有过剩
  • 太速科技-688-基于 VM1302的双路100G光纤PCIe4.0X16加速计算卡
  • 【Linux】函数
  • Hypium纯血鸿蒙系统 HarmonyOS NEXT自动化测试框架
  • 生成式AI新星:DeepSeek-V3 与 GPT-4o 的对比分析
  • R shiny app | 网页应用 空格分隔的文本文件在线转csv
  • Go语言的数据类型
  • 实时数仓: Hudi 表管理、Flink 性能调优或治理工具脚本
  • 微电网运维:保障能源“小宇宙”稳定运行
  • 代码随想录 day 22 回溯算法 part01