1.configuration类
主要作用是:解析hibernate配置文件和持久化映射文件中的信息.需要注意的是:该类仅仅只是在获取SessionFactory对象时需要使用,在获取SessionFactory后,由于配置信息已经由hibernate维护并绑定在放回的SessionFactory中,所以该configuration对象已经无使用价值.
下面让我们看看权威的挨批(API)文档上解释吧:
引用
An instance of Configuration allows the application to specify properties and mapping documents to be used when creating a SessionFactory. Usually an application will create a single Configuration, build a single instance of SessionFactory and then instantiate Sessions in threads servicing client requests. The Configuration is meant only as an initialization-time object. SessionFactorys are immutable and do not retain any association back to the Configuration.
重点理解粗字部分,通常情况下一个应用只会创建一个config对象,创建一个SessionFactory对象,然后使用session对象来处理客户请求.他只是个"初始化瞬间"变量.
一步情况下我们会创建一个简单工厂来生产SessionFactory对象,代码如下:
package util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class SessionFactoryUtil {
private static final SessionFactory sf;
static{
try{
sf = new Configuration().configure().buildSessionFactory();
}
catch(Throwable tw){throw new ExceptionInInitializerError(tw);}
}
private SessionFactoryUtil(){}
public SessionFactory getSessionFactory(){
return sf;
}
}
配置文件的格式一般如下:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库方言支持 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 添加C3P0数据库连接池 -->
<property name="c3p0.min_size">5</property>
<property name="c3p0.min_size">10</property>
<property name="c3p0.max_statements">50</property>
<property name="c3p0.timeout">3600</property>
<property name="c3p0.idle_test_period">120</property>
<property name="c3p0.acquire_increment">2</property>
<!-- 数据库连接配置 -->
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/hibernate</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<!-- 数据库开发选项 -->
<property name="current_session_context_class">thread</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="myeclipse.connection.profile">HibernateDemoMYSQLDriver</property>
</session-factory>
</hibernate-configuration>
2.SessionFactory接口
通过SessionFactory对象可以获取Session对象,正如上面api文档所讲的,设计者的意图是让他能在整个应用中共享使用,即如果只使用一个数据库,则只需要使用一个SessionFactory对象,如果你需要同时操作多个数据库则需要生产多个SessionFactory,还有,SessionFactory是作为一级缓存的形式存在,缓存了自动生成的SQL语句和一些其他的映射数据,同时还缓存了一些将来有可能重负使用的持久化对象.生成SessionFactory代码如下:
Configuration config = new Configuration();
config.configure();
SessionFactory sessionfactory = config.buildSessionFactory();
待续....