Configuration配置对象:
Configuration主要用于Hibernate框架加载映射文件:
Configuration类的作用是对Hibernate进行配置,以及对它进行启动。在Hibernate的启动过程中,Configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration类在整个Hibernate项目中只扮演一个很小的角色,但它是启动Hibernate时所遇到的第一个对象。
加载核心配置文件:
在使用Hibernate时,首先要创建Configuration实例,Configuration实例主要用于启动、加载、管理Hibernate的配置文件信息。在启动Hibernate的过程中,Configuration实例首先确定Hibernate配置文件的位置,然后读取相关配置,最后创建一个唯一的SessionFactory实例。Configuration对象只存在于系统的初始化阶段,它将SessionFactory创建完成后,就完成了自己的使命。
Hibernate通常使用Configuration config = new Configuration().configure()的方式创建实例,此种方式会默认去src下读取hibernate.cfg.xml配置文件。如果不想使用默认的hibernate.cfg.xml配置文件,而是使用指定目录下(或自定义)的配置文件,则需要向configure()方法中传递一个文件路径的参数,其代码写法如下:
Configuration config = new Configuration().configure("xml文件位置");
此种写法Hibernate会去指定位置查找配置文件,例如,想要使用src下config包中的hibernate.cfg.xml文件,只需要将文件位置加入configure()中即可,其代码如下所示:
Configuration config = new Configuration().configure("/config/hibernate.cfg.xml");
加载映射文件:
Hibernate除了可以使用Configuration对象加载核心配置文件外,还可以利用该对象加载映射文件。因为如何使用properties文件作为Hibernate的核心配置文件,其他的属性可以使用key=value的格式来设置,但是映射没有办法加载。这时这个对象就有了用武之地。可以在手动编写代码的时候去加载映射文件。
Configuration configuration = new Configuration().configure("xml文件位置");
configuration.addResource("pers/zhang/domain/User.hbm.xml");
SessionFactory工厂对象:
SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
SessionFactory接口负责Hibernate的初始化和建立Session对象。它在Hibernate中起到一个缓冲作用,Hibernate可以将自动生成的SQL语句、映射数据以及某些可重复利用的数据放在这个缓冲区中。同时它还保存了对数据库配置的所有映射关系,维护了当前的二级缓存。
SessionFactory实例是通过Configuration对象获取的,其获取方法如下所示:
SessionFactory sessionFactory = config.buildSessionfactory();
SessionFactory具有以下特点:
- 它是线程安全的,它的同一个实例能够供多个线程共享
- 它是重量級的,不能隨意的创建和销毁它的实例
由于SessionFactory的这些特点,一般情况下,一个项目中只需要一个SessionFactory,只有当应用中存在多个数据源时,才为每个数据源建立一个SessionFactory实例。因此,在实际项目使用中,通常会抽取一个HibernateUtils的工具类,用来提供Session对象。
Hibernate工具类:
public class HibernateUtils{
private static final Configuration configuration;
private static final SessionFactory sessionFactory;
static{
configuration = new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
}
//获得Session的方法
public static Session openSession(){
return SessionFactory.openSession();
}
}
SessionFactory内部还维护了一个连接池,如果我们需要使用第三方的连接池如C3P0,那么我们自动手动进行配置:
<!-- 配置c3p0连接池 -->
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!-- 在连接池中可用的数据库连接的最少数目 -->
<property name="cep0.min_size">5</property>
<!-- 在连接池中所有数据库连接的最大数目 -->
<property name="c3p0.max_size">20</property>
<!-- 设定数据库连接的过期时间,以秒为单位,如果连接池中的某个数据库连接处于空闲状态的事件超过了timeout时间,就会从连接池中清除 -->
<property name="c3p0.timeout">120</property>
<!-- 每3000秒检查所有连接池中的空闲连接,以秒为单位 -->
<property name="c3p0.idle_test_period">3000</property>
本文深入解析Hibernate框架的配置过程,包括Configuration对象的使用,核心配置文件与映射文件的加载,SessionFactory的创建与特点,以及如何配置第三方连接池。
792

被折叠的 条评论
为什么被折叠?



