浅谈hibernate的sessionFactory和session

保姆级教程:在RK3588开发板上用MPP库实现H.264硬编码(附完整代码) 本文详细介绍了在RK3588开发板上使用MPP库实现H.264硬编码的全流程,包括环境准备、MPP库编译、编码器初始化与配置、数据输入与编码流程以及高级性能优化技巧。通过实战案例和完整代码,帮助开发者充分利用RK3588的VPU硬件加速能力,提升视频编码效率和质量。 阅读详情

首先,讲一个悲伤的故事。。。

有一天,一个以为自己javaEE很叼的程序员,在经历了好久不写Java代码的情况下,去参加阿里巴巴的java面试,然后,在被问到一个很简单的问题的时候,结果没有回答好。那么接下来先说说这个问题吧。。。

问:hibernate的sessionfactory是干嘛的?session又是干嘛的呢?

那么,你会吗?可以讲清楚么?如果答案是会,可以,那么你就不用往下看了。。。。如果会还是想往下看,那么,

你就看呗微笑。

在回答这个问题之前,先来看看一些概念。

一、hibernate是什么?

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。----百度百科

其实我自己的理解是,使用hibernate,最常用的场景是,使用它的ORM机制,然后把传统的关系型数据库操作,转换为面向对象的方式来操作。为什么这么做呢?在没有使用到ORM之前。一个简单的例子,你在表单上,填了好多个数据,姓名,性别,年龄。。。。。爱好等等等,然后你使用JDBC去连接数据库,接下来一条一条的把数据从request或者某个地方读进来,如果有100个,表示需要定义100个变量来暂存这些表单数据,然后在保存到数据库中,在保存的时候,也要一下下的写sql语句,再次传100个值。。。如果是1000个。。想想就好累,我现在某个公司,学习使用PHP,存储数据的时候,就是这样一下下来,心好累。

那么如果有了ORM,是什么情况,你只要把对应的数据库的表,映射为一个对象(比如student)。然后在表单对应的input的name上,填写对应对象的对应属性(比如student.name),然后在保存的时候,在提交到的Action中,定义一个student的对象实例,那么这些数据就会自动保存在这个对象中了(我用了Struts2,不扯这个,只是说明效率)。接下来,你只需要保存一下这个对象就ok了。是不是感觉方便了好多。

二、什么是sessionfactory

SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。----百度百科

我的理解是,其实顾名思义,sessionfactory,就是用来创建session会话(具体接下来讲)的工厂。想想有一个特别大的工厂,专门用来在你需要使用session的时候,让它帮你创建一个就好了。(突然记起来一个冷笑话,如果你没有对象怎么办?办法是,new一个出来呗。。额你没有笑,我知道微笑)。但是需要注意一下就是,一般来讲,一个web工程(系统),如果涉及到的是一个数据库(你在学校做项目,一般就一个吧。。。哈哈哈),那么本工程就只需要一个sessionfactory就够了。这个工程所涉及到的所有的session,都交由这个sessionfactory来管理。

接下来,创建一个sessionfactory,一般有两种创建方式,1.从XML文件读取配置信息构建SessionFactory,2.从Java属性文件读取配置信息构建SessionFactory(这个不熟悉,没怎用,不好意思)。

第一种:

1》实例化Configuration对象,默认读取src目录下的hibernate.cfg.xml,配置文件

[java]  view plain  copy
 print ?
  1. <span style="font-size:18px;">Configuration config = new Configuration().configure();</span>  
或者在 configure();中指明文件名称和路径
[java]  view plain  copy
 print ?
  1. <span style="font-size:24px;">Configuration config = new Configuration().configure("hibernate.cfg.xml");</span>  


2》现在这个config对象,已经包括所有Hibernate运行期的参数,通过Configuration实例的buildSessionFactory()方法可以构建一个惟一的SessionFactory:

[java]  view plain  copy
 print ?
  1. <span style="font-size:24px;">SessionFactory sessionFactory = config.buildSessionFactory();</span>  


3》得到这个sessionfactory对象之后,就可以开始另外的话题了

三、什么是Session

提起来Session的话,首先想到的是http这个东东的session,想到了http这个无状态的协议,没办法保存任何访问对象的信息,所以就出现了session这个东东,用来记录访问者的一些信息。但是,好好转折一下下,转折,转折,转折说三遍。

在hibernate中的session并不是http中所说的session,一般把HttpSession对象称为用户会话。。。

而hibernate中的Session呢?是用来表示,应用程序和数据库的一次交互(会话)。在这个Session中,包含了一般的持久化方法(CRUD),不要说不知道CRUD是什么微笑。而且,Session是一个轻量级对象(线程不安全),通常将每个Session实例和一个数据库事务绑定,也就是每执行一个数据库事务,都应该先创建一个新的Session实例,在使用Session后,还需要关闭Session。(记得关闭哈)

接下来,创建一个Session对象,依据第二步得到的sessionfactory对象。

[java]  view plain  copy
 print ?
  1. <span style="font-size:24px;">Session session=sessionFactory.openSession();</span>  

然后得到这个session之后,就可以使用它来进行数据库的具体操作了,给一个简单的代码。多说一句,一般来说在使用session的时候,都会用到事务,尤其是需要对数据做修改的时候。上代码:

[java]  view plain  copy
 print ?
  1. <span style="font-size:24px;">public void save(Student student) {  
  2.     Transaction transaction= getSession().beginTransaction();  //开启事务  
  3.     getSession().save(student);//只要传一个Student的对象实例        
  4.     transaction.commit();  //事务提交   
  5.     getSession().close();//关闭session  
  6. }</span>  


简单的总结一下。那么开始继续那个故事,应为那个程序员在面试的时候,没有记起来一些事情,尤其是hibernate的session和http的session的区别,导致很郁闷。所以做次简单的总结,希望给有需要的人一些帮助。因为自己理解的也不是很深刻,难免有些地方扯的不对,还望大家见谅,并提出来。

offer还未到手,同志还需努力。加油哦吐舌头!!!

5G LDPC编码实战:从校验矩阵到Matlab代码实现(附完整源码) 本文深入解析5G NR标准中的LDPC编码工程实现,聚焦于从3GPP协议中的QC-LDPC校验矩阵到高效Matlab代码的转换。文章详细阐述了基础矩阵(BG1/BG2)选择、提升因子确定以及利用双对角结构的快速编码算法,并提供了完整的、可优化的Matlab源码,旨在帮助通信算法工程师和开发者快速构建5G LDPC编码仿真原型,为硬件实现奠定基础。 阅读详情

相关推荐

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

zeng699304的博客 2万+

Spring3 整合Hibernate3.5 动态切换SessionFactory (切换数据库方言)

一、缘由 上一篇文章Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法介绍到了怎么样在Sping、MyBatis、Hibernate整合的应用中动态切换DataSource数据源的方法,但最终遗留下一个问题:不能切换数据库方言。数据库方言可能在当前应用的架构中意义不是很大,但是如果单纯用MyBatis或Hibernate做数据库持久化操...

weixin_33872660的博客 302

2022网安保研经验帖

2022网安保研经验

fumingxiaoshen的博客 4894

hibernate-SessionFactory详解

坚持每天写博文,积累下开发中的点点滴滴 Configuration:用于拿到SessionFactory; 重要方法:addClass(domain.class):添加映射,一般不用 configure()用于实例化Configuration;SessionFactory: 主要用于创建session.SessionFactory对象中保存了当前数据库配置信息和所有映射关系及预定义的sql语

张晓鉴Allen的博客 925

Linux -- 图形界面配置Samba;system-config-samba工具

图形界面配置Samba6.6.1 system-config-sambasystem-config-samba是Red Hat公司专门为Samba服务器管理编写的图形界面的管理工具,通过system-config-samba几乎可以完成对Samba服务器的所有配置,所以在只希望通过Samba服务器实现一些简单的资源共享时,system-config-samba是一个不错的选...

weixin_33695450的博客 2200

基于gem5模拟trace的cache模拟器的实现

在做计算机体系结构的时候,模拟器是一个重要且又有效的工具。其中gem5集成了gem和m5的优点,使用起来比较简单和方便。其中包括了se模式和fs模式,se模式是在gem5运行我们已经编译好的程序,可以获取cache,cpu状态等数据,fs模式下可以模拟操作系统,我们可以将我们自己修改的linux内核加载到哥们上运行。下面介绍了使用gem5的se模式,运行编译好的ARM可执行文件。获取访存的trac

gaoxiang的专栏 8891

Hibernate - SessionFactory和Session详解

【1】SessionFactory 接口 SessionFactory 接口是针对单个数据库映射关系经过编译后的内存镜像,是线程安全的。 SessionFactory 对象一旦构造完毕,即被赋予特定的配置信息。 SessionFactory是生成Session的工厂,构造 SessionFactory 很消耗资源,一般情况下一个应用中只初始化一个 SessionFactory 对象。 Hibern...

小小默:进无止境 1万+

深度篇——图像处理的一些方法(一) 关于 图像处理的三个层次 与 selective search

返回主目录 返回 图像处理的一些方法 目录 下一章:深度篇——图像处理的一些方法(二)细说性能评估 IOU和 GIOU 目录内容 深度篇——图像处理的一些方法(一)关于图像处理的三个层次 与 selective search 深度篇——图像处理的一些方法(二)细说性能评估 IOU和 GIOU 深度篇——图像处理的一些方法(三)细说 HOG特征与bag-o...

天下所弃,不过其纪。世间事,在人,在志。 2916

Hibernate之Configuration,SessionFactory,Session

Configuration: 负责管理Hibernate的配置信息,这些配置信息都是从配置文件hibernate.cfg.xml或者Hibernate.properties读取的,当然也可以自定义文件名称,只要在实例化Configuration的时候指定具体的路径就可以了; SessionFactiory: Configuration的实例会根据当前的配置信息,构造SessionFa...

weixin_30823001的博客 266

OpenClaw-遇到的问题-Health check failed: gateway closed (1006 abnormal closure (no close frame)): no clos

OpenClaw网关服务安装成功但运行异常,显示健康检查失败(错误代码1006)。系统提供了Web控制界面(http://127.0.0.1:18789/)和带令牌的安全访问链接。文档建议参考故障排除指南,并提供了可选应用扩展功能(包括移动端支持)。注意运行本地代理存在安全风险,建议加固系统配置。若需启用网络搜索功能,需配置Brave搜索API密钥。安装完成后会自动打开仪表盘,需保持浏览器标签页以控制OpenClaw服务。

直到世界的尽头 1万+

Sigrity Power Tree如何生成电源树操作指导

Sigrity Power Tree可以方便地生成电源树,仅需要网表文件就能将系统的电源树直观的显示出来,生成的电源树文件可以用Power DC,optimizePI进行直流和交流仿真,下面介绍如何生成电源树。Base on [Device_TYPE and VALUE]就是识别网表中器件的Device_TYPE作为power tree中的模型的名字。Allegro layout netlist file,就是从Allegro layout文件中输出的netlist第三方网表文件。如何生成电源树操作指导。

weixin_54787054的博客 1532

Hibernate基础之SessionFactory

Hibernate基础之SessionFactory

maryverynice_的博客 701

【即插即用模块】注意力篇 | TGRS 2025 | ASD:自适应频域解耦,动态拆分高低频+空间注意力,频域空间特征双增强!

摘要: FDMF-Net提出了一种频域解耦多模态融合网络,核心组件为振幅谱解耦模块(ASD)。ASD通过自适应频域拆分和频域-空域协同增强,有效分离模态不变与模态特定特征。该模块利用MLP学习动态阈值调整高低频比例,并通过空间注意力分别强化频域特征,在遥感语义分割任务中实现了细节与结构的协同增强。实验表明,ASD模块能减少模态内冗余,提升特征判别性,为多模态数据融合提供了新思路。代码已开源,适用于需要强化细节与结构的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 304

java——浅谈hibernate的sessionFactory和session

一、hibernate是什么? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。----百度百科 其实我自己的理解是,使用hibernate,最常用的...

super-yong的博客 609

VB摄像头监控

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

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Hibernate:浅谈hibernate的sessionFactory和session

首先,讲一个悲伤的故事。。。 有一天,一个以为自己javaEE很叼的程序员,在经历了好久不写Java代码的情况下,去参加阿里巴巴的java面试,然后,在被问到一个很简单的问题的时候,结果没有回答好。那么接下来先说说这个问题吧。。。 问:hibernate的sessionfactory是干嘛的?session又是干嘛的呢? 那么,你会吗?可以讲清楚么?如果答案是会,可以,那么你就不用往下看了。...

galaxy的博客 707

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: spring原理机制
下一篇: java模拟http请求调用远程接口工具类
砍我一刀
博客等级 码龄14年 9粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值