温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

hibernate的sessionfactory是做什么的

发布时间:2021-12-06 09:07:59 来源:亿速云 阅读:270 作者:iii 栏目:大数据

本篇内容介绍了“hibernate的sessionfactory是做什么的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

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

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

一、hibernate是什么?

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。    ----百度百科
其实我自己的理解是,使用hibernate,最常用的场景是,使用它的ORM机制,然后把传统的关系型数据库操作,转换为面向对象的方式来操作。为什么这么做呢?在没有使用到ORM之前。一个简单的例子,你在表单上,填了好多个数据,姓名,性别,年龄。。。。。爱好等等等,然后你使用JDBC去连接数据库,接下来一条一条的把数据从request或者某个地方读进来,如果有100个,表示需要定义100个变量来暂存这些表单数据,然后在保存到数据库中,在保存的时候,也要一下下的写sql语句,再次传100个值。。。如果是1000个。。想想就好累。
那么如果  有了ORM,是什么情况,  你只要把对应的数据库的表,映射为一个对象(比如student)。然后在表单对应的input的name上,填写对应对象的对应属性(比如student.name),  然后在保存的时候,在  提交到的Action中,  定义一个student的对象实例,  那么这些数据就会自动保存在这个对象中了。接下来,你  只需要保存一下这个对象就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,配置文件

<span style="font-size:18px;">Configuration config = new Configuration().configure();</span>


或者在configure();中指明文件名称和路径

<span style="font-size:24px;">Configuration config = new Configuration().configure("hibernate.cfg.xml");</span>


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

<span style="font-size:24px;">SessionFactory sessionFactory = config.buildSessionFactory();</span>


第二种


1》创建一个Configuration对象,此时Hibernate会默认加载classpath中的配置文件hibernate.properties,代码如下。

Configuration config = new Configuration();


2》由于在配置文件中缺少相应的配置映射文件的信息,所以此处需要通过编码方式加载,这可以通过Configuration对象的addClass()方法实现,具体代码如下。

config.addClass(BranchForm.class);
 

addClass()方法用于加载实体类。


3》完成配置文件和映射文件的加载后,将得到一个包括所有Hibernate运行期参数的Configuration实例,通过Configuration实例的buildSessionFactory()方法可以构建一个惟一的SessionFactory,代码如下。

SessionFactory sessionFactory = config.buildSessionFactory();
 

构建SessionFactory要放在静态代码块中,因为它只需在该类被加载时执行一次。

三、什么是Session

提起来Session的话,首先想到的是http这个东东的session,想到了http这个无状态的协议,没办法保存任何访问对象的信息,所以就出现了session这个东东,用来记录访问者的一些信息。   但是,好好转折一下下,转折,转折,转折说三遍。
在hibernate中的session   并不是http中所说的session,一般把HttpSession对象称为用户会话。。。
而hibernate中的Session呢?是用来表示,   应用程序和   数据库的一次交互(会话)。在这个Session中,包含了一般的持久化方法(CRUD),不要说不知道CRUD是什么。而且,Session是一个轻量级对象(线程不安全),通常将每个Session实例和一个数据库事务绑定,也就是每执行一个数据库事务,都应该先创建一个新的Session实例,在使用Session后,还需要   关闭Session。   (记得关闭哈)  
接下来,创建一个Session对象,依据第二步得到的sessionfactory对象。  
 
<span style="font-size:24px;">Session session=sessionFactory.openSession();</span>


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

<span style="font-size:24px;">public void save(Student student) {    Transaction transaction= getSession().beginTransaction();  //开启事务    getSession().save(student);//只要传一个Student的对象实例            transaction.commit();  //事务提交     getSession().close();//关闭session}</span>

“hibernate的sessionfactory是做什么的”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI