Hibernate API解析

来源:互联网 发布:旅游网站源码 编辑:程序博客网 时间:2024/05/29 14:17

一.Configuration

  1.Configuration类管理Hibernate的配置信息,包括如下内容:

     1> hibernate.cfg.xml文件。该文件包含Hibernate运行的底层信息:JDBC驱动类、数据库的URL、用户名、密码、方言、数据库连接池等。

     2> *.hbm.xml文件,即持久化类与数据表的映射关系。

 

  2.创建Configuration对象

     方式一:属性文件(hibernate.properties

             Configuration cfg = new Configuration();

     方式二:XML文件(hibernate.cfg.xml

             1)加载默认的配置文件

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

             2)或者加载指定的配置文件

                Configuration cfg = new Configuration().configure("myhibernate.cfg.xml");


二.ServiceRegistry

  1.ServiceRegistryService的注册表,为Service提供一个统一的加载、初始化、存放、获取机制。

   

  

  2.ServiceRegistry代理结构:先从本级节点查找,找不到再去父节点查找。

 

  3.ServiceRegistry的组成:

     1> BootstrapServiceRegistry

          主要提供ClassloadingService loading服务,供全局使用。

     2> ServiceRegistry

          标准的ServiceRegistry,亦服务于全局,当初始化ServiceRegistry时,可能会使用到BootstrapServiceRegistry中的服务。

     3> SessionFactoryServiceRegistry

          与SessionFactory相关联(一对一的关系), 这里面的Services在初始化的时候需要访问SessionFactory

 

       所以, BootstrapServiceRegistry 中主要包括全局都要使用的基础服务而 ServiceRegistry 主要包括在 BootstrapServiceRegistry 之上的Hibernate 相关的服务例如配置文件解析, JDBC, JNDI 等。

       而SessionFactoryServiceRegistry 则是和sessionfactory相关的了包括2LCregionfactory, event listener等。

       这里面的层级关系对于 service registryclient来说是完全透明的可以直接调用getService 去获取需要的service, 而不用去关心在哪个层级上如同 classloader.

 

  核心代码:

  //加载默认的配置文件

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

  //创建注册服务对象

  ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();

 

.SessionFactory

  1.SessionFactory对象是由Configuration对象根据当前的配置信息生成的。

     SessionFactory对象构造完毕,即被赋予特定的配置信息,包括:保存当前的数据库配置信息、所有映射关系、预定义SQL语句、维护Hibernate的二级缓存。

 

  如下示例代码:

  //创建Configuration对象

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

  //创建注册服务对象

  ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();

  //创建SessionFactory对象

  SessionFactory sessionFactory = cfg.buildSessionFactory(serviceRegistry);

 

  2.SessionFactory是生成Session的工厂

     Session session = sessionFactory.openSession();

 

  3.构造SessionFactory非常消耗资源,故一个应用程序只初始化一个SessionFactory对象。

 

四.Session

  1.Session是应用程序与数据库之间交互操作的一个单线程对象,是Hibernate运作中心,所有持久化对象必须在session的管理下才可进行持久化操作。

     Session中有一个缓存,在显示执行flush()之前,所有的持久化层操作的数据都缓存在session对象中。

    

 

 

  2.持久化类与Session关联后就具有持久化的能力

 

  3.Session类的常用方法:

   1> 取得持久化对象的方法:get()load()

   2> 持久化对象都需保存、更新和删除:save()update()saveOrUpdate()delete()

   3> 开启事务:beginTransaction()

   4> 管理Session的方法:isOpen()flush()clear()evict()close()

 

.Transaction

  1.Transaction代表一次原子操作,具有数据库事务的概念。所有的持久层都应该在事务管理下进行。

     Transaction transaction = session.beginTransaction();

  2.常用方法:

     commit():提交相关联的session实例

     rollback():撤销事务操作

     wasCommitted():检查事务是否提交

 

 

 

0 0
原创粉丝点击