更新时间:2024-01-24 来源:黑马程序员 浏览量:
SessionFactory接口负责读取并解析映射文件,以及建立Session对象,它在Hibernate中起到一个缓冲区的作用,会将Configuration对象中的所有配置信息、Hibernate自动生成的SQL语句以及某些可重复利用的数据加载到缓冲区中。同时,它还维护了Hibernate的二级缓存。
通常所使用的SessionFactory实例是通过Configuration对象获取的,其获取方法如下所示:
SessionFactory sessionFactory=config.buildSessionFactory();
SessionFactory具有以下特点。
·它是线程安全的,它的同一个实例能够供多个线程共享。
·它是重量级的,不能随意创建和销毁它的实例。
由于SessionFactory是一个重量级的对象,占用的内存空间较大,所以通常情况下,一个应用程序只需要一个SessionFactory实例,只有应用中存在多个数据源时,才为每个数据源建立一个SessionFactory实例。为此,在实际开发中,通常会抽取出一个工具类提供Session对象。下面就介绍一个简单的抽取方式,如文件23-5所示。
文件23-5 HibernateUtils.java
public class HibernateUtils { //声明一个私有的静态final类型的Configuration对象 private static final Configuration config; //声明一个私有的静态final类型SessionFactory对象 private static final SessionFactory factory; //通过静态代码块构建SessionFactory static { config=new Configuation().configure(); factory=config.buildSessionFactory(); } //提供一个公有的静态方法供外部获取,并返回一个session对象 public static Session getSession() { return factory.openSession(); } }
在文件23-5中,首先声明了一个私有的静态final类型的Configuration对象和SessionFactory对象,供类中的其他成员使用,下面通过静态方法构建了SessionFactory实例,最后提供了一个公有的静态方法供外部获取session对象。使用此工具类,就可以直接通过HibernateUtils.getSession()的方式获取session对象。