MyBatis 与 Hibernate

本博客旨在概述MyBatis和Hibernate。在我们谈论MyBatis和Hibernate之前,最好先将对象关系映射作为一个概念 来讨论。

对象关系映射(ORM)是一种编程技术,它能够使用首选编程语言的面向对象范式(即,在关系数据库和面向对象的编程语言(如Java,.NET等)之间转换数据)编写简单和复杂的查询。

对象关系映射 (ORM) 是一种从面向对象的语言访问关系数据库的技术(设计模式),可帮助应用程序实现持久性。

那么什么是持久性呢?

持久性只是意味着我们希望应用程序的数据比应用程序进程更持久。在 Java 术语中,某些对象的状态位于 JVM 的范围之外,以便以后可以使用相同的状态。

Hibernate和MyBatis都与Spring框架兼容。

Hibernate是一个对象关系映射框架(ORM),它将Java类映射到数据库表,而MyBatis是一个持久性框架 - 而不是ORM,它将SQL语句映射到Java方法。

什么是Hibernate?

Hibernate是一种开源的轻量级ORM(对象关系映射)工具。

它是一个 Java 框架,通过将应用程序域对象映射到关系数据库表(反之亦然),简化了 Java 应用程序的开发,以与实现 JPA(Java 持久性 API)规范的数据持久性数据库进行交互。

Hibernate通常使用自定义查询语言,即休眠查询语言 (HQL) 或企业 JavaBeans 查询语言 (EJB QL)。

Hibernate具有以下设计理念:

  • 轻量级 − Hibernate是一个轻量级框架,因为它不包含其他功能;它仅使用对象关系映射所需的那些功能。
  • 开源 − Hibernate是开源软件,这意味着每个人都可以免费使用它。
  • ORM(对象关系映射)− Hibernate是一个 ORM 工具,有助于 Java 类和关系数据库之间的交互。
  • 高性能 − Hibernate支持许多不同的提取技术,例如缓存、延迟初始化等,以实现高性能。
  • HQL(Hibernate查询语言)− Hibernate是一个轻量级框架,因为它不包含其他功能,并且仅使用对象关系映射所需的那些功能。
  • 缓存 − 缓存是将数据存储到缓存内存中并提高数据访问速度的过程。Hibernate支持两级缓存,即第一级和第二级缓存。
  • 自动生成 − Hibernate提供了自动生成表的功能。这意味着程序员不必担心查询实现,即Hibernate自己做。
  • 可伸缩性 − Hibernate是高度可伸缩的,因为它可以适应任何环境。Hibernate既可用于小规模应用程序,也可用于大规模应用程序。
  • 延迟加载 − Hibernate支持一个称为延迟加载的新概念。延迟加载概念检索执行的唯一必要对象。它还提高了应用程序的性能。
  • 数据库独立 − Hibernate是独立于数据库的,因为它提供“数据库方言”,所以我们不需要编写SQL查询。它支持许多数据库,如Oracle,MySql,Sybase等。

什么是MyBatis?

MyBatis是一个开源、轻量级、持久的框架。

它是 JDBC 和Hibernate的替代方法。

它自动执行 SQL 数据库与 Java、.NET 等对象之间的映射。

MyBatis和其他持久性框架之间的显着区别在于,MyBatis强调使用SQL,而其他框架(如Hibernate)通常使用自定义查询语言(HQL / EJB QL)。

MyBatis是iBATIS 3.0的一个分支,由一个团队维护,该团队包括iBATIS的原始创建者。

MyBatis具有以下设计理念 -

  • 开源 − MyBatis 是免费的开源软件。
  • 支持 ORM − MyBatis 支持许多与 ORM 工具相同的功能,例如延迟加载、联接提取、缓存、运行时代码生成和继承。
  • 简单性 − MyBatis被广泛认为是当今最简单的持久性框架之一。
  • 快速开发 − MyBatis 尽其所能促进超快速开发。
  • 可移植性 − MyBatis几乎可以用于任何语言或平台,例如适用于微软.NET的Java,Ruby和C#。
  • 独立接口 − MyBatis 提供独立于数据库的接口,帮助应用程序其余部分的 API 独立于任何与持久性相关的资源。
  • 存储过程 − MyBatis 以存储过程的形式封装 SQL,以便业务逻辑可以保留在数据库之外,并且应用程序更具可移植性,更易于部署和测试。
  • 内联 SQL − 无需预编译器,您可以完全访问 SQL 的所有功能。
  • 动态 SQL − MyBatis 提供了基于参数动态构建 SQL 查询的功能。

MyBatis 以SQL为中心。它可以帮助您调用 SQL 语句并将结果(表)映射到对象树。

主要的好处是它不是ORM。它不会将表映射到对象,因此不会遇到 ORM 阻抗不匹配。

在哪里使用Hibernate和MyBatis ?

Hibernate用于

  • 常规 CRUD(创建、读取、更新和删除)功能。
  • 环境由对象模型驱动,需要自动生成 SQL。
  • 会话管理。

MyBatis用于

  • 分析提取查询。
  • 存储过程和动态 SQL。
  • 支持复杂的搜索查询(其中搜索条件是动态的)和结果分页。

ORM 与持久性框架

Hibernate是一个对象关系映射框架 (ORM),它将 Java 类映射到数据库表。

MyBatis是一个持久性框架,而不是ORM。它将 SQL 语句映射到 Java 方法。

场景:

例如,考虑要更改域数据的命令和只想获取一些数据的响应。

  1. 创建/更新/删除一些复杂的域实体
  2. 运行分析提取查询(即求和/聚合查询)

Hibernate适用于选择查询(情况1),允许您只创建POJO并保留/更新它。它也可以快速执行此操作,除非您的域非常大。

MyBatis非常适合获取查询(案例2),您只需要一个答案。

Hibernate 将尝试加载整个对象图,并且您需要使用延迟加载技巧开始调整查询,以使其在大型域上正常工作。

相反,如果你只想要一些分析POJO页面,那么同一查询的MyBatis实现将是微不足道的。

正因为如此,在选择中,MyBatis比Hibernate 更快。

因此,考虑到这两种情况以及您的应用程序的作用,您可以得出结论,是否需要Hibernate 或MyBatis。

如果你有一个简单的域名,只是获取信息,使用MyBatis。

如果您有复杂的域和持久实体,请使用Hibernate 。如果两者都做,请考虑混合方法(即,数千个实体以控制它)。

总结

如上所述,如果您的关注点以对象为中心,则Hibernate效果更好。但是,如果您的关注点以数据库为中心,那么myBatis是一个更有力的选择。这两个工具的作用比上面描述的要多得多,但一个是ORM,一个不是。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MybatisHibernate都是Java持久化框架,它们的作用都是将Java对象映射到数据库中的表,从而实现对数据库的操作。但是它们的实现方式和特点有所不同。 1. 映射方式 Mybatis采用的是基于XML或注解的SQL映射方式,开发人员需要手动编写SQL语句,并将Java对象的属性映射到SQL语句中,从而实现对数据库的操作。 Hibernate则采用的是基于ORM(Object-Relational Mapping)的映射方式,它可以将Java对象与数据库表中的记录进行映射,不需要手动编写SQL语句,开发人员只需要在Java对象中定义好属性和关系即可。 2. 性能 Mybatis相对于Hibernate来说更加轻量级,因为它只需要编写简单的SQL语句即可完成对数据库的操作,不需要进行复杂的对象关系映射。因此,Mybatis的性能比Hibernate更快。 但是,Hibernate的ORM映射方式可以提高开发效率,减少代码量,同时也可以实现缓存和查询优化等功能,因此在某些场景下,Hibernate的性能可能更好。 3. 灵活性 Mybatis相对于Hibernate来说更加灵活,它允许开发人员自定义SQL语句,可以实现更加复杂的查询操作。而Hibernate则对SQL语句有一定的限制,因为它需要根据Java对象的属性和关系来生成SQL语句。 4. 学习难度 Mybatis相对于Hibernate来说学习难度较低,因为它的映射方式比较简单,开发人员只需要掌握SQL语句的编写和Java对象属性的映射即可。而Hibernate需要开发人员掌握一定的ORM知识和查询优化等技巧。 总的来说,MybatisHibernate各有优缺点,选择哪种框架要根据具体情况而定,如果对性能要求比较高,可以选择Mybatis,如果对开发效率和代码量要求比较高,可以选择Hibernate

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值