hibernate中session和sessionFactory的作用

转载:https://blog.csdn.net/m0_37154839/article/details/79506466
https://www.cnblogs.com/baizhanshi/p/7686959.html

  1. configuration接口

Configuration负责管理Hibernate的配置信息。Hibernate运行时需要一些底层实现的基本信息。这些信息包括:数据库URL、数据库用户名、数据库用户密码、数据库JDBC驱动类、数据库dialect。用于对特定数据库提供支持,其中包含了针对特定数据库特性的实现,如Hibernate数据库类型到特定数据库数据类型的映射等。
使用Hibernate必须首先提供这些基础信息以完成初始化工作,为后续操作做好准备。这些属性在Hibernate配置文件hibernate.cfg.xml中加以设定,当调用:
Configuration config=new Configuration().configure();
时,Hibernate会自动在目录下搜索hibernate.cfg.xml文件,并将其读取到内存中作为后续操作的基础配置。

  1. sessionFactory接口

SessionFactory负责创建Session实例,可以通过Configuration实例构建SessionFactory。

Configuration config=new Configuration().configure();

SessionFactorysessionFactory=config.buildSessionFactory();

Configuration实例config会根据当前的数据库配置信息,构造SessionFacory实例并返回。SessionFactory一旦构造完毕,即被赋予特定的配置信息。也就是说,之后config的任何变更将不会影响到已经创建的SessionFactory实例sessionFactory。如果需要使用基于变更后的config实例的SessionFactory,需要从config重新构建一个SessionFactory实例。

SessionFactory保存了对应当前数据库配置的所有映射关系,同时也负责维护当前的二级数据缓存和Statement
Pool。由此可见,SessionFactory的创建过程非常复杂、代价高昂。这也意味着,在系统设计中充分考虑到SessionFactory的重用策略。由于SessionFactory采用了线程安全的设计,可由多个线程并发调用。

  1. session

Session是Hibernate持久化操作的基础,提供了众多持久化方法,如save、update、delete等。通过这些方法,透明地完成对象的增加、删除、修改、查找等操作。在hibernate中的session并不是http中所说的session,一般把HttpSession对象称为用户会话。。。。而且,Session是一个轻量级对象(线程不安全),通常将每个Session实例和一个数据库事务绑定,也就是每执行一个数据库事务,都应该先创建一个新的Session实例,在使用Session后,还需要关闭Session。

而hibernate中的Session呢?是用来表示,应用程序和数据库的一次交互(会话)。在这个Session中,包含了一般的持久化方法

同时,值得注意的是,HibernateSession的设计是非线程安全的,即一个Session实例同时只可由一个线程使用。同一个Session实例的多线程并发调用将导致难以预知的错误。

Session实例由SessionFactory构建:

Configuration config=new Configuration().configure();

SessionFactorysessionFactory=config.buldSessionFactory();

Session session=sessionFactory.openSession();

  1. Hibernate中Java对象的状态

在一个Hibernate应用中,Java对象可以处于以下三个状态之一:

1.临时状态(Transient)。处于这个状态的对象还被没有纳入Hibernate的缓存管理体系,跟任何session都不关联,在数据库中也没有对应的记录。

2.持久化状态(Persistent)。处于这个状态的对象位于Session的缓存中,并且和数据库中的一条数据记录相对应。

3.游离状态(Detached)。处于这个状态的对象不再位于Session的缓存中,它与临时对象的最大区别在于,游离对象在数据库中还可能存在一条与它对应的记录。
在这里插入图片描述

  1. 创建session
    a、getCurrentSession方法:

采用该方法创建的session实例会绑定到当前线程当中。且session实例会在提交或回滚时自动关闭。
Configurationconfig=new Configuration().configure();
SessionFactorysessionFactory=config.buldSessionFactory(); Session
session=sessionFactory.openSession();

b、openSession方法:
采用该方法会创建新的的session实例。使用完后需进行手动关闭。

Configurationconfig=new Configuration().configure();
SessionFactory sessionFactory=config.buildSessionFactory();
Session session=sessionFactory.getCurrentSession();

c.关闭session

public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}

最后说一下用hibernate的三个必须要了解的三个方面(具体代码我就不写了,你去hibernate框架提供的例子里面找,hibernate有中文文档提供给你的)
1。主配置文件:hibernate.cfg.xml:
用来 配置数据库连接;
映射文件的配置;
其他一些配置;
2。映射文件:XXX.hbm.xml //XXX代表你要关联的类的名称是是什么,你就写什么
向数据中存储数据需要用对象来存储封装,那数据库怎样将对象的属性跟数据库中表的属性对应,就需要你写映射文件;(这是学习重点,量比较多)
3。api:也就是你上面问的session的用法等等
这部分只要了解一些简单操作就行,往往得到session后代码就一句话,这块比较简单,重点还是映射文件那块,只要配置文件整出来,这块不成问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值