Hibernate3.1 主要接口和类

一、Configuration类

      

Configuration类位于org.hibernate.cfg.Configuration下。Configuration对象用于配置并且启动Hibernate。Hibernate应用通过Configuration实例来指定对象-关系映射关系的位置或者动态配置Hibernate的属性,然后创建SessionFactory实例。

 
 

获得Configuration类的一个实例的方法:

1 new Configuration().configure()

当执行Configuration conf = new Configuration().configure()语句时,Hibernate会自动在classpath中搜寻Hibernate配置文件。在JAVA应用中,Hibernate会自动在WEB-INF/classes目录下搜寻Hibernate配置文件。

 

configure()方法在默认情况下通过访问hibernate.cfg.xml的<mapping>元素来加载程序员提供的.hbm.xml文件。可以同过下面方法指定.hbm.xml文件:

addClass(Class): 直接通过指定Class来加载对应的映射文件。

addFile(File)

addFile(String)

addURL(URL)

 

 

2  HibernateSessionFactory.getConfiguration();

Configuration conf =ibernateSessionFactory.getConfiguration();

从当前HibernateSessionFactory的中得到。

 

二、SessionFactory接口


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

一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例。SessionFactory有以下特点:

1 它是线程安全的,这意味着它的同一个实例可以被应用程序的多个线程共享。

2 它是重量级的,这就意味着不能随意创建或销毁它的实例。
示例:
Configuration cfg = new Configuration().configurate();
SessionFactory sf = cfg.buildSessionFaction();
Configuration
对象根据当前的配置信息,生成SessionFactory对象。
SessionFactory一旦被创建,就被赋予特定的配置信息。即以后配置的改变不会影响到创建的SessionFactory对象。
如果要把改动后的配置信息赋予SessionFactory对象,需要从新的Configuration对象生成新的SessionFactory对象。

注:SessionFactory是线程安全的,可以被多线程调用以取得Session,而且构造SessionFactory很消耗资源,所以大多数情况下一个应用只初始化一个SessionFactory,为不同的线程提供Session。

当客户端发送一个请求线程时,SessionFactory生成一个Session对象处理客户请求。

 

 

三、Session接口

 

Session接口是Hibernate应用使用最广泛的接口Session也被称为持久化管理器,它提供了和持久化相关的操作,如添加、更新、删除、加载和查询对象。

 Session有以下特点:

1 不是线程安全的,因此在设计软件架构时,应避免多个线程共享一个Session实例。

2 Session是轻量级的,所谓轻量级,是指它的创建和销毁不需要消耗太多的资源。


Session对象通过SessionFactory构建:
Session session = SessionFactory.openSession()


对持久化类的理解:
一个持久化类从定义上和一个普通的JavaBean类没有任何区别,但它与Session关联起来,就具有了持久化的能力。
这种持久化操作是受Session控制的,即通过Session对象装载、保存、创建、或查询持久化对象PO。

Session类的主要方法:

1 建立查询对象

createQuery()方法:用来从Session生成Query对象。
beginTransaction()方法:用来从Session生成Transaction对象。


2管理Session的方法:

isOpen(),flush(),clear(),evict()和close()等方法。

获取持久化对象:get()和load()方法.

get()方法
public object get(Class entityClass,Serializable id)


entityClass 表明类的类型,id是对象的主键值,如果id是int类型,应通过new Integer(id)的方法把它变成一个Integer对象。


load()方法

public object load(Class entityClass,Serializable id)

load()方法和get
()方法都能通过主键id值从数据库中加载一个持久化对象PO。

两者的主要区别:当数据库中不存在主键id值,load()方法会抛出org.hibernate.ObjectNotFoundExceptioget()方法则抛出java.lang.NullPointerException

 


3 持久化对象的保存、更新、和删除:

save(),update(),saveOrUpdate()和delete()等方法。




 

 

理解Sesion的缓存

在Session接口的实现类org.hibernate.impl.SessionImpl中定义了一系列的Java集合,这些Java集合构成了Session的缓存。

 

Session缓存的三大作用

1 减少访问数据库的频率。

2 保证缓存中的对象与数据库中的相关记录可以保持同步。

3 当缓存中的持久化对象存在循环关系时,Session会保证不出现访问对象的死循环,以及由死循环引起的JVM堆栈溢出异常。

 

注意:Session的commit()和flush()方法的区别:

flush():清理缓存并执行一系列SQL语句,不提交事务。

commit():会先调用flush()方法,然后提交事务。提交事务意味着数据所做的更新被永久保存下来。

          

 

Hibernate应用中Java对象的状态

       对于需要持久化的Java对象,在它的生命周期中,可处于以下三种状态:

1 临时状态(transient):刚刚被new语句创建,还没有被持久化,不处于Session的缓存中。处于临时状态的Java对象被称为临时对象。

2 持久化状态(persistent):已被持久化,加入到Session的缓存中。处于持久化状态的Java对象称为持久化对象。

3 游离状态(detached):已被持久化,但不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象。



 

四、Query和Criteria接口

 

Query和Criteria接口是Hibernate的查询接口,用于向数据库查询对象,以有控制执行查询的过程。

 

 Query实例包装了一个HQL(Hibernate Query Language)查询语句,HQL和SQL查询语句有些相似,便HQL查询语句是面向对象的,它引用类名及类的属性名,而不是表名及表的字段名。

 

Criteria接口完全封装了基于字符串形式的查询语句,比Query接口更加面向对象。Criteria接口擅长于执行动态查询

复杂查询用QBC检索方式。QBC检索方式主要由Criteria接口、Criterion接口和Expression、Restrictions类组成。

 

 

五、Transaction接口

 Transaction接口是Hibernate的数据库事务接口,它对底层的事务接口做了封装,底层事务接口包括:

JDBC API

JTA (Java  Transaction  API)

CORBA  (Common Object Requet Broker Architecture) API

Hibernate应用可通过一致的Transaction接口来声明事务边界,这有助于在不同的环境或容器中移植。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值