百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Hibernate是什么(hibernate作用)

mhr18 2024-09-29 13:55 24 浏览 0 评论

  Hibernate 是一个开源免费的、基于 ORM 技术的 Java 持久化框架。通俗地说,Hibernate 是一个用来连接和操作数据库的 Java 框架,它最大的优点是使用了 ORM 技术。

  2001 年,27 岁的程序员 Gavin King 首次发布了 Hibernate。Gavin King 是一名来自澳大利亚的愤青,他非常厌恶当时流行的 EJB 框架,因为 EJB 框架的实体 bean 让数据库操作变得异常麻烦,于是他自己动手开发了一个符合 ORM 理论的 Java 框架,并于 2001 年 11 月首次发布,这个框架就叫 Hibernate。

  2003 年 9 月,Gavin King 及其开发团队加入 JBoss 公司,开始全职开发 Hibernate,从此 Hibernate 获得了突飞猛进的发展和普及。

  什么是 ORM?

  ORM 是一种自动生成 SQL 语句的技术,它可以将对象中的数据自动存储到数据库中,也可以反过来将数据库中的数据自动提取到对象中,整个过程不需要人工干预,避免了手写 SQL 带来的麻烦。

  学习 Hibernate 必须先了解 ORM,我们已经在上一节中详细介绍了 ORM 技术,不了解的读者请转到:ORM 是什么?

  什么是持久化?

  所谓持久化,就是将程序中的数据存储到数据库中。

  程序必须加载到内存才能运行,程序运行过程中产生的数据也位于内存中,而内存是一种临时性存储介质,当程序关闭或者计算机断电后数据就会消失,为了让数据永久存储,必须将它们写入硬盘,而数据库就是数据在硬盘上的一种高效的存储和组织形式,非常便于数据的插入、删除、查找、更新等。

  将程序中的数据写入数据库,数据就可以永久存储,不会随着程序的关闭而消失了,所以将这个过程称为数据的持久化。

  Hibernate 支持的数据库

  Hibernate 支持几乎所有主流的关系型数据库,只要在配置文件中设置好当前正在使用的数据库,程序员就不需要操心不同数据库之间的差异。

  以下常见数据库都被 Hibernate 支持:

  MySQL

  Oracle

  Microsoft SQL Server

  DB2

  PostgreSQL

  FrontBase

  Sybase

  Hibernate 是一种全自动的 ORM 框架

  Hibernate 是一款全自动的 ORM 框架。之所以将 Hibernate 称为全自动的 ORM 框架,这其实是相对于 MyBatis 来说的。

  我们知道,ORM 思想的核心是将 Java 对象与数据表之间建立映射关系。所谓的映射关系,简单点说就是一种对应关系,这种对应关系是双向的:

  将数据表对应到 Java 对象上,这样数据表中的数据就能自动提取到 Java 对象中;

  将 Java 对象对应到数据表上,这样 Java 对象中的数据就能自动存储到数据表中。

  MyBatis 虽然是一种 ORM 框架,但它建立的映射关系是不完整的。Mybatis 只能将数据表映射到 Java 对象上,却不能将 Java 对象映射到数据表上,所以数据只能从数据表自动提取到 Java 对象中,反之则不行。要想将 Java 对象中的数据存储数据表中,开发人员需要手动编写 SQL 语句,依然非常麻烦,这就是 MyBatis 被称为半自动 ORM 框架的原因。

  与 MyBatis 相比,Hibernate 建立了完整的映射关系,它不仅能将数据表中的数据自动提取到 Java 对象中,还能自动生成并执行 SQL 语句,将 Java 对象中的数据存储到数据表中,整个过程不需要人工干预,因此 Hibernate 被称为全自动的 ORM 框架。

  Hibernate 和 MyBatis 都是业界主流的 ORM 框架和持久层解决方案,但两者存在一些区别,详情请参考 MyBatis 和 Hibernate 的区别。

  Hibernate 提供了缓存机制

  Hibernate 提供了缓存机制(一级缓存、二级缓存、查询缓存),我们可以将那些经常使用的数据存放到 Hibernate 缓存中。当 Hibernate 在查询数据时,会优先到缓存中查找,如果找到则直接使用,只有在缓存中找不到指定的数据时,Hibernate 才会到数据库中检索,因此 Hibernate 的缓存机制能够有效地降低应用程序对数据库访问的频次,提高应用程序的运行性能。

  JDBC vs Hibernate

  我们知道,JDBC 是 Java 领域中出现最早一种数据库访问技术,而 Hibernate 则是对 JDBC 的轻量级封装,它们都可以完成对数据库的增删改查(CRUD)操作,但两者存在以下差异,如下表。

区别

JDBC

Hibernate

代码量

代码繁琐,开发成本较高。

代码精简,开发成本较低。

语言

JDBC 使用的是基于关系型数据库的标准 SQL 语句。

Hibernate 使用的是 HQL(Hibernate query language)语句。

操作的对象

JDBC 操作的是数据,将数据通过 SQL 语句直接传送到数据库中执行。

Hibernate 操作的是 Java 对象。Hibernate 使用了 ORM 思想,在 Java 对象与数据库表之间建立映射关系,通过操作 Java 对象来实现对数据库的操作。

缓存

JDBC 没有提供缓存机制。

Hibernate 提供了缓存机制(例如一级缓存、二级缓存、查询缓存),对于那些经常使用的数据,可以将它们放到缓存中,不必在每次使用时都去数据库查询,缓存机制对提升性能大有裨益。

可移植性

JDBC 可移植性差,JDBC 中使用的 SQL 语句是以字符串的形式嵌入到代码中的,但不同数据库所使用的的 SQL 语法不尽相同,如果切换数据库(例如从 MySQL 数据库切换到 Oracle 数据库),需要修改大量代码。

Hibernate 可移植性好,能够屏蔽不同数据库之间的差异。当需要更换数据库时,通常只需要修改其配置文件(hibernate.cfg.xml)中的 hibernate.dialect(方言) 属性,指定数据库类型即可,Hibernate 会根据指定的方言自动生成适合的 SQL 语句。

读写性能

JDBC 是 Java 领域内性能最好的数据库访问技术。

Hibernate 性能较差。

可扩展性

JDBC 不具有可扩展性

Hibernate 框架开源免费,用户可以根据自身需要进行功能定制,具有良好的可扩展性。

  Hibernate 和 JDBC 都是十分优秀的数据库访问技术,它们都各有优缺点,但两者不存在孰优孰劣的问题,我们只需要根据自身需求和应用场景选择即可。

开课吧广场-人才学习交流平台

相关推荐

一文带您了解数据库的行列之争:行式与列式存储的异同

数据库存储格式是数据库管理系统中一个至关重要的方面,它直接影响到数据的组织和检索效率。在数据库中,有两种主要的存储格式,即行式存储和列式存储。这两者采用截然不同的方法来组织和存储数据,各自具有一系列优...

NL2SQL(三)开源项目怎么选:talk is cheap, show me the code!

老规矩,先看效果下面的demo来自试用的SuperSonic,将会在下面详细介绍:大模型时代Text-to-SQL特点随着基于LLM技术的发展,RAG/AIAgent/Fine...

JDK25长期支持版九月降临:18项王炸功能全解析

Java要放大招啦!9月份推出的JDK25长期支持版已经锁定18个超能力,从稳定值到结构化并发,还有Linux系统下的"预知未来"性能分析!下面我用打游戏的术语给你们掰扯明白:1、飞...

OceanBase 推出单机版 高度兼容MySQL和Oracle

【环球网科技综合报道】3月27日,独立数据库厂商OceanBase正式发布单机版产品。据悉,这一产品基于自主研发的单机分布式一体化架构设计,具备极简数据库架构和高度兼容性,为中小规模业务提供兼具性能与...

黄远邦:应对7月1日闰秒对Oracle数据库影响

由于今年7月1日全世界会多出一秒,这可能对时间敏感的IT系统造成较大影响。中亦科技数据库团队对此问题做了深入的研究,并对用户系统提出了相应的解决方法及建议。中亦科技数据库产品总监黄远邦认为,闰秒调整会...

MySQL数据库密码忘记了,怎么办?(mysql 数据库密码)

#头条创作挑战赛#MySQL数据库密码忘记了且没有其他可以修改账号密码的账户时怎么办呢?登录MySQL,密码输入错误/*密码错误,报如下错误*/[root@TESTDB~]#mysql-u...

Chinese AI Talent in Spotlight as Nvidia and Meta Escalate Talent War

OntherightisBanghuaZhu,ChiefResearchScientistatNVIDIATMTPOST--SiliconValley’stoptech...

用Cursor开启JAVA+AI生涯(javascirpt怎么开启)

Cursor是基于VSCode开发的一款编辑器,支持多种语言的开发编辑。与传统的开发工具相比,它有多种优势:与AI无缝集成,响应速度快,占用内存小。但很多同学在"起步"过程中遇到了...

毕业十年了,自从做了开发用了很多软件,但距离写开发工具还很远

办公系统类:办公软件Word、Excel、PowerPoint三大必备技能+腾讯/金山在线文档解压缩操作:7-zip/winrar文件文本处理:Notepad++(文本编辑器正则表达式超级好...

盘点Java中最没用的知识⑤:这3个老古董你还在代码里“考古”?

一、Stack类:“继承Vector”的历史bug,为何成了性能拖油瓶?你是不是在学Java集合时,老师说过“栈结构用Stack类”?是不是在老代码里见过"newStack<>(...

Gemini 2.5 Pro 0506发布,编程最强大模型, 碾压 Claude3.7 sonnent

一、Gemini2.5Pro(I/Oedition)发布1、为何叫I/Oedition?谷歌史上最强编程模型Gemini2.5Pro(I/Oedition)发布,具体型号是Gemin...

如何让无聊变得有趣(附本人大量美图)

文/图:金冬成在这条长300公里的公路上,我已经来回往返了无数次。3小时车程,一个人,想想都是多么无聊的一件事。其实,人生道路上,类似这种无聊的事情有很多很多。无聊的事情、枯燥的工作,往往让我们容易失...

Oracle 推出 Java 24,增强 AI 支持和后量子加密

导读:Oracle宣布正式发布Java24,该语言增加了几个新功能,例如StreamGatherersAPI和Class-FileAPI的可用性,以及专门为AI推理和量子安全设计...

公司ERP突然变慢?“索引重建”这颗“药”可不能随便吃!

各位老板、IT小哥、财务小姐姐,有没有遇到过公司ERP系统突然卡顿得像“老爷车”,点个按钮半天没反应,急得直跺脚?这时候,可能有人会跳出来说:“我知道,重建一下数据库索引就好了!”听起来像个“神操作”...

基于Java实现,支持在线发布API接口读取数据库,有哪些工具?

基于java实现,不需要编辑就能发布api接口的,有哪些工具、平台?还能一键发布、快速授权和开放提供给第三方请求调用接口的解决方案。架构方案设计:以下是一些基于Java实现的无需编辑或只需少量编辑...

取消回复欢迎 发表评论: