【大话Hibernate】Hibernate的核心接口和类

Hibernate的核心类和接口一共有6个,分别为:Session、SessionFactory、 Transaction、Query、Criteria和Configuration。这6个核心和类接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这6个核心接口和类分别加以介绍。

Configuration

Configuration类的作用是对Hibernate进行配置,以及对它进行启动。在Hibernate的启动过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration类在整个Hibernate项目中只扮演着一个很小的角色,但它是启动hibernate 时所遇到的每一个对象。简而言之,它负责管理Hiberante的配置信息,它主要用来加载这些配置文件,如hibernate.cfg.xml文件。

//加载的配置文件
Configuration config = new Configuration().configure("/hibernate/hibernate.cfg.xml");
//还可以加载映射文件
Configuration config = new Configuration().addFile("TRegister.hbm.xml");//方法一
Configuration config = new Configuration().addClass(hibernate.PO.TRegister.class);//方法二
Configuration config = new Configuration().addURL(Configuration.class.getResource("TRegister.hbm.xml"));//方法三

SessionFactory

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

Configuration config = new Configuration().configure("/hibernate/hibernate.cfg.xml");

SessionFactory    sessionFactory = config.buildSessionFactory();

Congifuration对象会根据当前的配置信息,生成SessionFactory对象。SessionFactory对象一旦构造完毕,即被赋予特定的配置信息,即以后配置改变不会影响到创建的SessionFactory对象。如果要把以后的配置信息赋给SessionFactory对象,需要从新的Configuration对象生成新的SessionFactory对象。SessionFactory是纯种安全的,可以被多线程调用以取得Session,而且构造SessionFactory很消耗资源,所以多数情况下一个应用中只初始化一个SessionFactory,为不同的线程提供Session。在实际应用中,当客户端发送一个请求线程时,SessionFactory生成一个Session对象来处理客户请求。

Session

Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。

简而言之,Session是应用程序与数据库之间的一个会话,是Hibernate运作的中心,持久层操作的基础,相当于JDBC中的Connection。Session对象是通过SessionFactory创建的:

  Session session = SessionFactory.openSession();

一个持久化类与普通的JavaBean没有任何区别,但是它与Session关联后,就具有了持久化能力。当然,这种持久化操作是受Session控制的,即通过Session对象的装载,保存,创建或查询持久化对象。Session类的save(),delete()和load()等方法,来分别完成对持久化对象的保存,删除,修改加载等操作!

Session类方法的用途可以分以下五类:

1:取得持久化对象:get()和load()等方法。
2:持久化对象的保存,更新和删除:save(),update()saveOrUpdate()和delete()等方法。
3:createQuery()方法:用来从Session生成的Query对象。
4:beginTransaction()方法:从Session对象生成一个Transaction对象。
5:管理Session的方法:isOpen(),flush(),clear(),evict()和close()等方法,其中isOpen()方法用来检查Session是否仍然打开;flush()用来清理Session缓存,并把缓存中的SQL语句发送出去,clear()用来清除Session中的所有缓存对象evict()方法来清楚Session缓存中的某个对象;close()关闭Session。

取得持久化对象的方法:

取得持久化对象的方法主要有get()和load(),它们通过主键id来取得PO。

public void testDemo(){
        Session session = HibernateUtil.currentSession();//生成Session实例
        TRegister tr = (TRegister)session.get(TRegister.class, new Integer(1));//get()方法
        //TRegister tr = (TRegister)session.load(TRegister.class newInteger(1));//load()方法     
   System.out.print(tr.getUserName());
}

get()与load()的区别:

先来理解两个概念:

立即加载对象:当hibernate在从数据库中取得数据组装好一个对象后会立即再从数据库取得数据此对象所关联的对象;

延迟加载对象:Hibernate从数据库中取得数据组装好一个对象后,不会立即再从数据库取得数据组装此对象所关联的对象,而是等到需要时, 都会从数据库取得数据组装此对象关联的对象;

get()方法的执行顺序如下:

      a):首先通过id在session缓存中查找对象,如果存在此id的对象,直接将其返回;
      b):如果在session中查找不到,就在二级缓存中查找,找到后将 其返回;
      c):如果在session缓存和二级缓存中都找不到此对象,则从数据库中加载有此ID的对象;
      因此get()方法并不总是导致SQL语句,只有缓存中无此数据时,才向数据库发送SQL!         

load()与get()的区别:

      1:在立即加载对象时,如果对象存在,load()和get()方法没有区别,都可以取得已初始化的对象;但如果当对象不存在且是立即加载时,使用get()方法则返
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值