当前位置:   article > 正文

MyBatis 与 Hibernate_mybatis hibernate

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,一个不是。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/179690
推荐阅读
相关标签
  

闽ICP备14008679号