Hibernate的核心API

来源:互联网 发布:c语言返回值什么意思 编辑:程序博客网 时间:2024/05/08 06:06

在Hibernate中有6个常用的核心API,分别是Configuration、SessionFactory、Session、Transaction、Query和Criteria(英文意思是:标准,条件)。

一、Configuration
Hibernate用这个API的实例去读取Hibernate配置文件和映射文件。其代码如下:
Configuration config = new Configuration().configure();
Configuration config = new Configuration().configure("xml文件位置");
二、SessionFactory
SessionFactory接口负责Hibernate的初始化和建立Session对象(sessionFactory实例保存了Configuration对象中的所有配置文件信息)。它在Hibernate中起到了一个缓冲区的作用,Hibernate可以将自动生成的SQL语句、映射数据以及某些可重复利用的数据放在这个缓冲区中。同时它还保存了对数据库配置的所有映射关系。它是Hibernate的二级缓存。其代码如下:

SessionFactory sf = config.buildSessionFacotry();

SessionFactory具有以下特点:
(1)它是线程安全的,它的一个实例可以提供给多个线程使用
(2)它是重量级的,不能随意地创建和销毁它的实例。(也就是说,创建和销毁SessionFactory的实例的开销大)

一般的项目中只需要一个SessionFactory对象即可,只有当一个项目具有多个数据源的时候才会需要创建多个SessionFactory。故通常会抽取出一个HibernateUtil类来获取Session对象。代码如下:

public class HibernateUtil{    private static final Configuration config;    private static final SessionFactory factory;    static{        config = new Configuration().configure();        factory = config.buildSessionFactory();    }    public static Session getSession(){        return factory.openSession();    }}

三、Session
Session是应用程序与数据库之间交互操作的单线程实例,它的主要作用是为持久化对象提供创建、读取和删除等功能,所有持久化对象必须在Session的管理下才可以进行持久化操作。通过SessionFactory获取Session实例有两种方法,代码如下:

Session session = SessionFactory.openSession();Session session = SessionFactory.getCurrentSession();

关于这两个获取Session实例的方法的区别,我们先来理解下什么是本地事务,什么是全局事务。
本地事务在Hibernate的配置文件中需要这样配置(jdbc事务):

<property name="hibernate.current_session_context_class">thread</property>

全局事务在Hibernate配置文件中需要这样配置(jta事务):

<property name="hibernate.current_session_context_class">jta</property> 

关于本地事务全局事务的区别,请参考:点击进入

简单来说,本地事务是在单个数据库的本地并且限制在单个进程内的事务;全局事务 是跨越多个数据库和进程的。

以上获取Session实例的两种方法的区别是:
(1)getCurrentSession()会绑定到当前的线程中去,而openSession()不会;
(2)getCurrentSession()创建的session在commit或rollback后会自动关闭,而openSession()不会
更多参考:点击进入

Session是线程不安全的,多个并发线程同时操作一个Session实例时,就可能导致Session存取的混乱(方法内部定义和使用Session时,不会出现线程问题),设计软件架构时,应尽量避免多个线程共享一个Session实例。Session是轻量级的,即,创建和销毁session不会消耗太大。Session是Hibernate的一级缓存,主要用于存放当前工作单元加载的对象。

Session提供了大量的方法,具体如下:

  • save()、update()、saveOrUpdate():用于增加或修改对象
  • delete():删除对象
  • get()、load():根据主键查询(这两个方法的区别:点击进入)
  • createQuery()和createSQLQuery():用于数据库查询对象(一般无条件)
  • createCriteria():条件查询

四、Transaction
事务。用于管理事务,代码如下:

Transaction tx = session.beginTransaction();

提供的方法:

  • commit():提交事务
  • rollback():事务回滚
  • wasCommitted():检查事务是否提交

五、Query
Query代表面向对象的一个Hibernate查询操作。使用这个对象的步骤:

  1. 获得Session对象
  2. 编写HQL语句
  3. 调用session.createQuery创建查询对象
  4. 如果HQL包含参数,使用Query的setXxx设置参数
  5. 调用对象的list()或uniqueResult()方法执行查询
String hql = "from Customer";  //"Customer"是类Query q = session.createQuery(hql);

六、Criteria

0 0
原创粉丝点击