2.1简单的配置
配置Hibernate的最简单方法是仅提供最基础的数据库连接配置,需要在hibernate.cfg.xml文件里设定所使用的数据库驱动,URL,Hibernate方言,数据库的访问用户名和密码,以及在配置时需要加载的*.hbm.xml映射文件,例如以下的hibernate.cfg.xml
<?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>
<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<mapping resource="com/joy_cz/computer/computer.hbm.xml"/>
</session-factory></hibernate-configuration>
可以利用Hibernate提供的org.hibernate.cfg.Configuration类来将hibernate.cfg.xml中的内容导入,形成Configuration实例,然后由Configuration实例创建SessionFactory对象实例。对应过程代码如下:
PropertyConfigurator.configure("log4j.Properties");
Configuration cfg = new Configuration();
cfg.configure();//或者cfg.configure(new File("src/hibernate.cfg.xml"));
SessionFactory sf=cfg.buildSessionFactory();
2.2连接池的配置
在hibernate中,可以使用多种连接池实现工具,例如:C3P0和Proxool。下面的hibernate.cfg.xml配置文件使用了C3P0数据库连接池:
<?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>
<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.min_size">8</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">2500</property>
<property name="hibernate.c3p0.max_statements">50</property>
<mapping resource="com/joy_cz/computer/computer.hbm.xml"/>
</session-factory></hibernate-configuration>
使用这个配置文件运行Hibernate程序后,Hibernate会启用C3P0连接池。
2.3JNDI和数据源的配置
如果Hibernate被嵌入到J2EE应用服务器中,或者与其他程序共享一个数据源,那么可以通过JNDI来传递数据源对象,此时,在Hibernate的配置文件中,能够通过datasource属性设定数据源的JNDI名称来引用数据源,但是对应名称的数据源一定要在Hibernate引用它之前被其他程序或J2EE应用服务器绑定到JNDI。
<?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>
<property name="hibernate.jndi.class">org.apache.naming.java.javaURLContextFactory</property>
<property name="hibernate.connection.datasource">Hibernate</property>
<mapping resource="com/joy_cz/computer/computer.hbm.xml"/>
</session-factory></hibernate-configuration>
在这个配置中,使用了APACHE的JNDI服务,对用的JNDI上下文工厂类是:org.apache.naming.java.javaURLContextFactory,包含这个类的naming-factory.jar文件和相关的naming-resources.jar文件可以从TOMCAT的发行包中得到,使用上面的配置文件需要导入这两个JAR文件。使用方法如下:
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.log4j.PropertyConfigurator;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
public class ComputerTest{
public static void main(String[] args){
//创建MYsql数据源
MysqlDataSource ds=new MysqlDataSource();
ds.setURL("jdbc:mysql://localhost:3306/hibernate");
ds.setUser("root");
ds.setPassword("123456");
//设置JNDI参数
Hashtable table=new Hashtable();
table.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.naming.java.javaURLContextFactory");
try{
InitialContext ctx = new InitialContext(table);
ctx.bind("Hibernate",ds);
}catch(NamingException e1){e1.printStackTrace();}
2.4事务服务
在Hibernate中,默认的事务服务是基于JDBC的数据库事务服务。当忽略事务服务的配置时,默认的事务工厂属性将被配置为:
org.hibernate.transaction.JDBCTransactionFactory
如果在J2EE应用服务器中使用Hibernate,可以将事务工厂类配置为:
org.hibernate.transaction.JTATransactionFactory
同时指定hibernate.transaction.manager_lookup_class属性到特定的查找类,例如, 在JBOSS内使用hibernate时可以将查找类指定为:
org.hibernate.transaction.JBossTransactionManagerLookup