Hibernate 第一天 hibernate中使用API

Configuration对象
 

在使用Hibernate时,首先要创建Configuration实例,Configuration实例主要用于启动、加载、管理hibernate的配置文件信息。在启动Hibernate的过程中,Configuration实例首先确定Hibernate配置文件的位置,然后读取相关配置,最后创建一个唯一的SessionFactory实例。Configuration对象只存在于系统的初始化阶段,它将SessionFactory创建完成后,就完成了自己的使命。

Hibernate通常使用Configurationconfig = new Configuration().configure();的方式创建实例,此种方式默认会去src下读取hibernate.cfg.xml配置文件。如果不想使用默认的hibernate.cfg.xml配置文件,而是使用指定目录下(或自定义)的配置文件,则需要向configure()方法中传递一个文件路径的参数,其代码写法如下:

Configuration config = newConfiguration().configure("xml文件位置");

此种写法hibernate会去指定位置查找配置文件,例如,想要使用srcconfig包中的 hibernate.cfg.xml文件,只需将文件位置加入configure()中即可,其代码如下所示:

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

【加载映射文件】

       Hibernate除了可以使用Configuration对象加载核心配置文件以外,还可以利用该对象加载映射文件。因为如何使用properties文件作为Hibernate的核心配置文件,其他的属性可以使用key=value的格式来设置,但是映射没有办法加载。这时这个对象就有了用武之地。可以在手动编写代码的时候去加载映射文件。

Configuration configuration= new Configuration().configure("xml文件位置");

configuration.addResource("cn/itcast/domain/Customer.hbm.xml");

 
  常用方法
    

默认构造函数:

        它只能加载类的根路径下,名称为hibernate.properties的配置文件。不能加载xml

configure()

        它用于加载类的根路径下,名称为hibernate.cfg.xml的配置文件。

buildSessionFactory()

        根据配置文件,构建SessionFactory

addResource(String url);

        指定映射文件的位置

addClass(Class clazz);

        指定实体类的字节码

SessionFactory
 作用

SessionFactory接口负责Hibernate的初始化和建立Session对象。它在Hibernate中起到一个缓冲区作用,Hibernate可以将自动生成的SQL语句、映射数据以及某些可重复利用的的数据放在这个缓冲区中。同时它还保存了对数据库配置的所有映射关系,维护了当前的二级缓存。

SessionFactory 实例是通过Configuration对象获取的,其获取方法如下所示。

SessionFactory sessionFactory =config.buildSessionFactory();
      常用方法

openSession():每次都是生成一个新的Session

  细节
该对象维护了很多信息

l   连接数据库的信息

l   hibernate的基本配置

l   映射文件的位置,以及映射文件中的配置

l   一些预定义的SQL语句(这些语句都是通用的)比如:全字段保存,根据id的全字段更新,根据id的全字段查询,根据id的删除等等。

l   hibernate的二级缓存(了解)

同时,它是一个线程安全的对象,所有由该工厂生产的Session都共享工厂中维护的数据。

使用原则
由于SessionFactory维护了很多信息同时又是线程安全的,一般情况下,一个项目中只需要一个SessionFactory,只有当应用中存在多个数据源时,才为每个数据源建立一个SessionFactory实例。因此,不应该反复的创建和销毁。 

Session 作用

Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,它的主要功能是为持久化对象提供创建、读取和删除的能力,所有持久化对象必须在session的管理下才可以进行持久化操作。

创建SessionFactory实例后,就可以通过它获取Session实例。获取Session实例有两种方式,一种是通过openSession()方法,另一种是通过getCurrentSession()方法。两种方法获取session的代码如下所示:

          

//采用openSession方法创建session

Session session = sessionFactory.openSession();

//采用getCurrentSession()方法创建session

Session session =sessionFactory.getCurrentSession();

以上两种获取session实例方式的主要区别是,采用openSession方法获取Session实例时,SessionFactory直接创建一个新的Session实例,并且在使用完成后需要调用close方法进行手动关闭。而getCurrentSession方法创建的Session实例会被绑定到当前线程中,它在提交或回滚操作时会自动关闭。

在没有配置把Session绑定当前线程之前,getCurrentSession方法无法使用,所以今天我们只使用openSession方法。
   
    常用方法

save(Object entity);  :保存一个实体到数据库

update(Object entity);:更新一个实体

delete(Object entity);:删除一个实体

get(Class clazz,Serializable id);:根据id查询一个实体。参数的含义:Class表示要查询的实体类字节码。Serializable就是查询的条件。

beginTransaction();:开启事务,并返回事务对象

     细节

由于SessionFactory已经维护了很多数据,所以Session就维护较少的内容。

             它是一个轻量级对象。并且:它不是线程安全的!!!!!!!

             它维护了hibernate的一级缓存(关于一级缓存的问题都是明天的内容)。

             它的反复创建销毁不会消耗太多资源。


 使用原则
       每个线程都只有一个 Session 对象。

Transaction 

 作用:
   Transaction接口主要用于管理事务,它是Hibernate的数据库事务接口,且对底层的事务接口进行了封装。Transaction接口的事务对象是通过Session对象开启的,其开启方式如下所示。
   

Transaction transaction =session.beginTransaction();

  常用方法

  commit(); //提交事务
   rollback();//回滚事务

Session执行完数据库操作后,要使用Transaction接口的commit()方法进行事务提交,才能真正的将数据操作同步到数据库中。发生异常时,需要使用rollback()方法进行事务回滚,以避免数据发生错误。因此,在持久化操作后,必须调用Transaction接口的commit()方法和rollback()方法。如果没有开启事务,那么每个Session的操作,都相当于一个独立的操作。

猜你喜欢

转载自blog.csdn.net/zhanshixiang/article/details/80481776