什么是Hibernate?

Hibernate——建立第一个hibernate项目 背景:今天学习了考研内容。 阅读详情

这里是修真院后端小课堂,每篇分享文从

大家好,我是IT修真院郑州分院一枚正直纯洁善良的java程序员。
今天给大家分享一下,修真院官网java任务十,深度思考中的知识点——什么是Hibernate?

背景介绍
一开始手动编写代码执行连接对象和数据的操作,为了减少重复性的劳动,开发人员创建了ORM工具,使整个过程自动化,但最初的这些工具标准太多,比较复杂,后来轻量级的框架Hibernate脱颖而出,只需要把持久化管理交给Hibernate去做。

知识剖析
Hibernate实现过程

1、Hibernate初始化,构建Configuration实例。

2、自动加载配置文件到Configuration实例。

3、通过配置文件的mapping元素加载映射文件到Configuration实例。

4、通过已创建的Configuration实例构建SessionFactory实例。

5、通过SessionFactory实例创建Session的实例,与数据库建立连接。

6、通过Session实例创建Transaction实例,开始一个事务。

7、利用Session接口提供的方法进行持久化操作。

8、将操作结果提交到数据库并结束事务。

9、关闭Session连接。

Hibernate对象的三种状态

瞬时态:只是在jvm内存获取一块空间,还没有在数据库中处于持久化状态,它的最大特点是:在数据库不存在与它对应的记录。

例如:Student s=new Student();

总结瞬时态的特点:①、不与session实例关联;②、在数据库中没有和瞬时对象关联的记录。

持久态:持久化对象就是已经被保存进数据库的实体对象,并且这个实体对象还处于hibernate的缓存管理中,这时对实体对象的任何修改,都会在清理缓存时同步到数据库中。

持久态的特点是:①、持久的实例在数据库中有对应的记录并拥有一个持久化标识(identifier);②、和session相关联的对象。

游离态(托管状态):该状态最大的特征就是对象脱离了hibernate的缓存管理状态。

游离态与瞬时态的区别是:瞬时态时数据库没有与其对应的记录;而游离态时数据库中有一个对应的记录但是脱离了hibernate缓存管理状态。

hql即Hibernate Query Language,Hibernate提供的面向对象的查询语言,语法类似sql。

因为hql语句时面向对象的,所以hql语句的主体是对象。

如果想select *可以不加,默认句首是select *,还有占位符(?和:),?和sql语句里一直,:占位符后面是占位符的名字,:后面不可以跟空格。

常见问题
getCurrentSession和openSession的区别

这里获取session方法有两种,一种是getCurrentSession(),一种是openSession(),我现在知道的区别是前一种是获取当前线程绑定(事务)的Session,使用后不需要关闭,还有最关键的一点这种方法是基于事务的,必须配置好事务管理,另一种是新建一个全新的Session,使用完需要手动关闭。因为新建的Session会线程不同步,所以要保证线程安全的话使用getCurrentSession()。还有一点,因为getCurrentSession() 依赖事务,所以需要添加一段配置

不过使用spring的话就不需要了,在非 Spring环境下,CurrentSessionContext的实现是由 “hibernate.current_session_context_class”属性来控制的。但是在Spring环境 下,CurrentSessionContext的实现则变成了 SpringSessionContext或者SpringJtaSessionContext ,在创建CurrentSessionContext的方法buildSpringSessionContext里已经设置好该属性。

扩展思考
一级缓存和二级缓存。

一级缓存由Session提供,只存在于Session的生命周期中,默认使用;当应用程序调用Session接口的save(),update(),saveOrupDate(),get(),load()或者Query和Criteria实例的list(),iterate()等方法时,如果Session缓存中没有相应的对象,hibernate就会把对象加入到一级缓存中,当session关闭时,该Session所管理的一级缓存也会立即被清除。

二级缓存是一个可插拔的缓存插件,它是由SessionFactory负责管理的,需要手动配置;由于SessionFactory对象的生命周期与应用程序的整个过程对应,通常一个应用程序对应一个SessionFactory,因此,二级缓存是进程范围或者集群范围的缓存;与一级缓存一样,二级缓存也是根据对象的id来加载与缓存,当执行某个查询获得结果集为实体对象集时,hibernate就会把它们按照对象id加载到二级缓存中,在访问指定的id的对象时,首先从一级缓存中查找,找到就直接使用,找不到则转到二级缓存中查找(必须配置且启用二级缓存),如果二级缓存中找到,则直接使用,否则会查询数据库,并将查询结果根据对象的id放到缓存中。

还有查询缓存,如果启用了查询缓存,当第一次执行查询语句时,hibernate会将查询结果存储在二级缓存中,以后再次执行该查询语句时,从缓存中获取查询结果,从而提高查询性能;hibernate的查询缓存主要是针对普通属性结果集的缓存,而对于实体对象的结果集只缓存id;查询缓存的生命周期,若当前关联的表发生修改,那么查询缓存的生命周期结束。

参考文献
https://www.cnblogs.com/anhelida/p/3962999.html

https://www.w3cschool.cn/hibernate_articles/gapw1ioo.html

https://blog.youkuaiyun.com/honghailiang888/article/details/53423941

更多讨论
Q1:Studenthbm.xml中id标签和property标签定义的区别是什么?

A1:id是设置主键的,property是映射其他字段的。

Q2:Hibernate中的Session指的是什么? 可否将单个的Session在多个线程间进行共享?

A2:指的是和数据库建立的连接,通过Session进行对数据库的操作。Session不能再多个线程见进行共享。

Q3:Hibernate中get和load有什么不同之处?

A3:get和load的最大区别是,如果在缓存中没有找到相应的对象,get将会直接访问数据库并返回一个完全初始化好的对象,而这个过程有可能会涉及到多个数据库调用;而load方法在缓存中没有发现对象的情况下,只会返回一个代理对象,只有在对象getId()之外的其它方法被调用时才会真正去访问数据库,这样就能在某些情况下大幅度提高性能。

Hibernate技术深度解析 Hibernate 支持 HQL(Hibernate Query Language)和 Criteria API 两种查询方式,允许开发者编写更灵活、更复杂的查询语句。 阅读详情

相关推荐

hibernate还有人用吗

🏆作者简介:哪吒,优快云2022博客之星Top1、优快云2021博客之星Top2、多届新星计划导师✌、博客专家💪,专注Java硬核干货分享,立志做到Java赛道全网Top N。🏆本文收录于,,目前已经700+订阅,优快云最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。🏆姐妹篇,,包含面向对象、基本数据类型、数组、继承和多态、泛型、枚举等Java基础知识点。🏆姐妹进阶篇,

学Java,找哪吒 1万+

Hibernate框架【一】——HIbernate框架介绍

Hibernate是一个开源的Java对象关系映射(ORM)框架,它提供了一种方便的方式将Java对象与关系型数据库进行映射和交互。通过Hibernate,开发人员可以使用面向对象的方式操作数据库,而不需要直接编写SQL查询语句。

理想主义的花最终会盛开在浪漫主义的土壤里,我的热情永远不会熄灭在现实的平凡之中,我们终将上岸,阳光万里。 1万+

STM32硬件SPI驱动ADS1220实战:从零搭建高精度数据采集系统(附避坑指南)

本文详细介绍了使用STM32硬件SPI驱动24位高精度ADC芯片ADS1220的完整实战方案。内容涵盖从硬件设计、CubeMX工程配置、SPI通信底层实现到数据读取策略与性能优化的全流程,并重点分享了多通道切换、噪声抑制等关键避坑指南,帮助开发者构建稳定可靠的高精度数据采集系统。

o4p5q6r7s的博客 448

Hibernate简单讲解

所谓的ORM就是利用描述对象和数据库表之间映射的元数据,自动把java应用程序中的对象持久化到关系型数据库的表中。通过操作java对象,就可以完成对数据库表的操作。可以把ORM理解为关系型数据和对象的一个纽带,开发人员只需关注纽带一段映射的对象即可。Hibernate框架使用ORM思想对数据库进行crud操作在web阶段学习的javabean,更准确的叫法应该是实体类ORM:Object Relational Mapping,对象关系映射。让实体类和数据库表对应,让实体类属性和表中字段对应。

weixin_42694511的博客 5026

【Docker】如何让docker容器正常使用nvidia显卡

描述了如何在docker容器中使用英伟达显卡的过程和问题解决方法。

NameLoadingFailed的博客 8372

手把手教你配置MAX96712解串器:从I2C地址分配到PWM帧同步

本文详细解析了MAX96712解串器在自动驾驶视觉链路中的核心配置流程。从I2C地址分配、GMSL2数据流映射到实现多摄像头精准同步的PWM帧同步触发,手把手指导工程师构建高可靠性的图像传输系统,并提供了实用的Linux调试技巧与问题排查思路。

weixin_29297127的博客 920

hibernate框架简介

目录 一、 历史与背景 1. 应用程序的分层体系结构 2. 持久化层(如图1右) (1)什么叫持久化? (2)什么叫持久层? (3)为什么要持久化?增加持久层的作用是什么? (4)目前在持久化层领域,实现模式有以下几种: 3. ORM介绍 二、Hibernate定义 三、Hibernate的作用 四、Hibernate的应用 五、Hibernate API简介 1.Hibernate API中的接口可以分为以下几类: 2. Hibernate的核心接口框图 六 Hib...

renxingzhadan的专栏 7923

WSL2+Ubuntu-22.04搭建PX4仿真环境:从零避坑到一键起飞

本文详细指导在Windows系统上通过WSL2和Ubuntu-22.04搭建PX4仿真开发环境的完整流程,涵盖环境配置、源码下载、依赖安装、Gazebo仿真及常见错误解决方案,帮助开发者从零避坑实现无人机一键起飞仿真。

k8s6orchestrator的博客 670

Hibernate入门第一讲——Hibernate框架的快速入门

Hibernate框架介绍什么是Hibernate我们可以从度娘上摘抄这样有关Hibernate的介绍: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以

李阿昀的博客 12万+

Cherry Studio部署MCP服务报错全记录:从零解决‘Connection closed‘问题

本文详细记录了在Cherry Studio中部署MCP服务时遇到‘Connection closed’报错的完整排查与解决过程。文章从环境依赖(UV、Bun)的安装验证、绝对路径配置、网络镜像源设置,到服务端手动调试与Cherry Studio配置检查,提供了一套系统性的解决方案,帮助开发者彻底解决此类连接问题。

g9h0i1的博客 761

第1集:面试官视角:AIOps 核心能力模型与面试项目全局搭建【免费试读】

本文介绍了一门面向AIOps工程师的面试实战课程,针对当前运维领域薪资差距明显的痛点,帮助学员系统掌握企业级AIOps平台开发能力。课程承诺提供可直接用于面试和生产环境的代码实现,从零构建模块化AIOps平台。第一集重点讲解了面试官视角下的核心能力模型,并指导学员搭建项目基础环境,包括Python虚拟环境配置、本地大模型部署(Ollama)以及智能巡检Agent的代码实现。课程强调实战导向,通过40集系统讲解,帮助学员实现薪资40-60万的职业跃升。

qq_2937655951的博客 615

UFS Hibernate介绍--代码部分

一 . UFS Hibernate简介

guozhidixian的博客 3855

Android 10.0 任务栏音乐播放器后台播放杀进程功能实现

在10.0的系统rom定制化开发过程中,在某些情况下在安装第三方播放器以后,播放音乐的时候,在最近任务栏recents列表中,点击全部清除,发现音乐播放器还在播放音乐,导致出现bug,完整的 解决方法,肯定是需要点击全部清除以后,音乐播放器也被杀掉进程,接下来看下这个问题怎么解决

安卓兼职framework和app工程师的博客 650

UFS Hibernate介绍--协议部分

一. UFS Hibernate 简介 Hibernate是一种Unipro的状态,这个Hibernate 进出的流程是在M-PHY定义的。 Hibernate 是一种 UniPro 状态,其中 PHY 处于 HIBERNATE_STATE,UniPro 堆栈保持 只有最小的一组功能处于活动状态。 UniPro 堆栈保留每个堆栈层定义的最小状态。 在休眠期间,UniPro 堆栈无法进行应用级数据传输/通信, 并且应用程序级接口的原语 T_CO_SAP 具有未定义的行为。 中 休眠,DME 继续可供 DM

guozhidixian的博客 3937

Lammps不同亲疏水性粗糙表面的润湿行为模拟(包含in文件)

Lammps粗糙表面的润湿行为模拟(包含in文件)前言—润湿行为模拟一、物理模型构建二、具体in文件—in文件内循环亲疏水性三、具体in文件—分子模板构建初始模型以及平衡态模拟四、全部代码(基地粗糙表面只提供data文件) 前言—润湿行为模拟 润湿现象:当液体与固体接触时,液体的附着层将沿固体表面延伸。当接触角 θ\rm \thetaθ 为锐角时,液体润湿固体,若θ为零时,液体将展延到全部固体表面上。润湿现象的产生与液体和固体的性质有关。(来自百度百科) 润湿行为的本质是固液之间的相互作用,也就是分子间的范

Rockyoung 7088

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【hibernate进阶】hibernate搭建开发环境+实例讲解

本篇博客将带着大家以一个简单的实例来学习hibernate项目。 1、创建java项目 2、创建User Library,加入依赖包 * HIBERNATE_HOME/lib/*.jar * HIBERNATE_HOME/hibernate3.jar * 加入数据库驱动(mysql驱动) 具体的操作步骤参考我的上一篇博客:【hibernate进阶】如何在myeclipse中添加ja

陈晓婵 8423

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Springboot整合Hibernate拦截器EmptyInterceptor

Springboot整合Hibernate拦截器EmptyInterceptor

2017年 5628

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

hibernate实战

离下班还有半个小时,写这个东东吧。 今天写了个hibernate实例。 第一步:向工程中添加hibernate的lib           * HIBERNATE_HOME/hibernate3.jar           * HIBERNATE_HOME/lib/*.jar           * 数据库 jdbc驱动 第二步:写hibernate.cfg.xml文件如下,这里有连接数据库,设置数据库方言,注册类映射文件User.hbm.xml(后面会提到)   jdbc:m

bluekeyv的专栏 842

Hibernate批量处理海量

最近一直常常看到别人javaeye网站上看到别人在问在hibernate怎么样处理海量数据,怎么样提高性能,本人在优快云博客上看到这篇好的文章,并结合本人一一验证 确实如作者所说 故拿出来和大家分享。希望对初学HIBERNATE框架的朋友有所帮助。  Hibernate批量处

雪禅子 4849

有关HIBERNATE

 有关HIBERNATE继承实现的三种策略 单表继承。每棵类继承树使用一个表(table per class hierarchy)  具体表继承。每个子类一个表(table per subclass)  类表继承。每个具体类一个表(table per concrete class)(有一些限制) 单表继承     双向关联  概念:双向关联允许通过关联的任一端访问另外一端。

summer的专栏 684

HIBERNATE是什么

无意中,一个朋友问我HIBERNATE是什么。这个问题让我很震惊。学了这么久。用了半年的HIBERNATE,对它就像自己的孩子。可是我连它的是什么我都不是很清楚。我能说HIBERNATE就是框架吗?这样也太让HIBERNATE默默无闻了。最起码框架这个词也太抽象了,讲给任何没接触过HIBERNATE的人,他们都不会理解。于是我去网上COPY了一份。希望大家好好理解。Hibernate是一个开放

chowqingbao1的专栏 1464

【HIbernate】hibernate 最简单的例子

做一个最简单的hibernate的例子 可以保存数据环境:      Myeclipse 6.5, hibernate3.2 1 先倒入数据驱动包和hibernate核心包 还有 要用到的相关包   所需包有如下:       hibernate目录下:          * hibernate3.jar   hibernate目录/lib/required目录下:      

水一方~! 4259

JAVA框架 / HIBERNATE / HIBERNATE系列教材 (一)- 基础 - HIBERNATE 基于实例的入门教程

JAVA 框架 / HIBERNATE / HIBERNATE系列教材 (一)- 基础 - HIBERNATE 基于实例的入门教程 #原文链接在这里 使用JDBC做数据库相关功能开发会做很多重复性的工作,比如创建连接,关闭连接,把字段逐一映射到属性中。 Hibernate把这一切都封装起来了,使得数据库访问变得轻松而简单,代码也更加容易维护。 第一次使用Hibernate会有一个比较多步骤的配置过...

weixin_44092440的博客 323

Java中的Hibernate是什么?如何使用Hibernate

总之,Transaction是Hibernate架构中非常重要的组件,它确保了Java应用程序与数据库之间的顺畅通信,并提供了许多其他有用的功能。总之,Session是Hibernate中非常重要的组件,它为开发人员提供了一种简单而强大的方式来管理Java应用程序与关系数据库之间的交互,并使得进行CRUD操作和数据检索变得更加容易和高效。总之,实体类应该是与Hibernate框架兼容的Java类,它应该定义数据库表中的列,并提供用于访问和操作这些列的方法。实体类应该包含与数据库表中的列对应的属性。

2301_77769537的博客 3667

将Hibernate配置到Weblogic JNDI上的详细步骤

一、首先需要把Hibernate用到的jar包和配置文件都放到Weblogic能够搜索到的CLASSPATH路径上。单单这一步就有很多人很迷茫,其实去仔细看看Weblogic的启动脚本文件startWeblogic.cmd和startWLS.cmd,我想大部分人都知道该怎么配置了。我机器上的有个Hibernate的项目,在D:/test/oracle目录下,该目录下的结构是:D:/test/ora

KevinAAA的专栏 1861

hibernate hibernate4详解

表名和类名不同的情况时,对表名进行配置  1 在注解中  import javax.persistence.Table; @Table(name=”TableName”)  2 在XML文件中    配置对应的table属性为相应的表名      …        字段名和属性名相同,默认为  对于annotation,如果什么注解都不写的话,相当于加了注解@Basic  实

Code-lover's Learning Notes 1559
上一篇: 简述angular中constant和$filter的用法
下一篇: 怎么进行分页数据的查询
learning__java
博客等级 码龄8年 87粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值