当前位置: 首页 > 图文教程 > Java技术 > Web框架 > 浅谈Hibernate的配置信息(一)

Web框架
浅谈Ajax与Spring集成
浅谈Mock和基于Spring容器管理事务的测试
Hibernate中一级缓存与二级缓存
浅谈Hibernate的配置信息(一)
浅谈Hibernate的配置信息(二)
浅谈Spring中使用Quartz来执行计划任务
浅谈JFreeChart实时曲线(代码)
Ajax框架中选DWR还是A4J
浅谈Hibernate中关联问题
浅谈项目开发过程中使用Struts-menu
浅谈使用模板模式简化操作Hibernate
Hibernate中加载并存储对象
浅谈Hibernate依赖对象(Dependent objects)
浅谈Hibernate中自定义值类型
ORM那些事
51培训对Hibernate中的事务详解
51培训详谈Hibernate检索
详谈Struts2的核心概念(上)
详谈Struts2的核心概念(下)
浅谈应用dom4j操作xml文件

Web框架 中的 浅谈Hibernate的配置信息(一)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-23   浏览: 101 ::
收藏到网摘: n/a

因为Hibernate被设计为可以在许多不同环境下工作,所以它有很多配置参数。幸运的是,大部分都已经有默认值了,Hibernate发行包中还附带有示例的hibernate.properties文件,它演示了一些可变的参数。

 

1. 可编程配置方式

 

net.sf.hibernate.cfg.Configuration的一个实例代表了应用程序中所有的Java类到关系数据库的映射的集合。这些映射是从一些XML映射文件中编译得来的。你可以得到一个Configuration的实例,直接实例化它即可。下面有一个例子,用来从两个XML配置文件中的映射中初始化:

Configuration cfg = new Configuration()

.addFile("Vertex.hbm.xml")

.addFile("Edge.hbm.xml");

另外一个(或许是更好的)方法是让Hibernate自行用getResourceAsStream()来装载映射文件。

Configuration cfg = new Configuration()

.addClass(eg.Vertex.class)

.addClass(eg.Edge.class);

Hibernate 就会在classpath中寻找叫做/eg/Vertex.hbm.xml/eg/Edge.hbm.xml的映射文件。这种方法取消了所有对文件名的硬编码。

Configuration也可以指定一些可选的配置项。

Properties props = new Properties();

...

Configuration cfg = new Configuration()

.addClass(eg.Vertex.class)

.addClass(eg.Edge.class)

.setProperties(props);

Configuration是仅在配置期使用的对象,从第一个SessionFactory开始建立的时候,它就失效了。

 

2. 获取SessionFactory

 

当所有的映射都被Configuration解析之后,应用程序为了得到Session实例,必须先得到它的工厂。这个工厂应该是被应用程序的所有线程共享的。当然,Hibernate并不禁止你的程序实例化多个SessionFactory。在你使用不止一个数据库的时候,这就有用了。

 

SessionFactory sessions = cfg.buildSessionFactory();

 

3. 用户自行提供JDBC连接

SessionFactory可以使用一个用户自行提供的JDBC连接来打开一个Session。这种设计可以让应用程序来自己管理JDBC连接。应用程序必须小心,不能在同一个连接上打开多个并行的session

 

java.sql.Connection conn = datasource.getConnection();

 

Session sess = sessions.openSession(conn);

 

// start a new transaction (optional)

 

Transaction tx = sess.beginTransaction();

上面的最后一行是可选的——应用程序也可能选择自行管理JTA或者JDBC事务。当然,假若你使用Hibernate Transaction,你的客户代码就可以从底层的实现中抽象出来了。(比如说,你可以将来在需要的时候切换到CORBA连接,而不需要更改程序代码。)

 

4. Hibernate提供的JDBC连接

 

另一种方法就是,你可以让SessionFactory替你打开连接。SessionFactory必须事先知道连接的参数,有几种不同的方法设置参数:

传递一个java.util.PropertiesConfiguration.setProperties()方法。

classpath的根目录中提供hibernate.properties文件。

通过java -Dproperty=value指定使用系统属性。

hibernate.cfg.xml文件中包含<property>元素。详情见后。

如果你使用这种方法,打开一个Session是非常简单的:

Session sess = sessions.openSession(); // obtain a JDBC connection and

// instantiate a new Session

// start a new transaction (optional)

Transaction tx = sess.beginTransaction();

所有的Hibernate属性名和约束都在net.sf.hibernate.cfg.Environment类中定义。我们讨论一下最重要的几项设置:

假若你设置了如下的属性,Hibernate会使用java.sql.DriverManager来得到连接,并建立连接池:

Table 3.1. Hibernate JDBC属性

属性名 用途

hibernate.connection.driver_class jdbc驱动类

hibernate.connection.url jdbc URL

hibernate.connection.username 数据库用户名

hibernate.connection.password 数据库用户密码

hibernate.connection.pool_size 连接池容量最大数

Hibernate的连接池算法是非常可配置的。它的用途是让你上手,但是并非让你在生产系统中使用的,甚至不是用来做性能测试的。

C3P0是随Hibernate发行包一起发布的一个开放源代码JDBC连接池,你可以在lib 目录中找到。假若你设置了hibernate.c3p0.* 属性,Hibernate会使用内置的C3P0ConnectionProvider作为连接池。 Apache DBCPProxool的支持也是内置的。你必须设置hibernate.dbcp.*属性 DBCP连接池属性)和hibernate.dbcp.ps.* (DBCP 语句缓存属性)才能使用DBCPConnectionProvider。要知道它们的含义,请查阅Apache commons-pool的文档。如果你想要用Proxool,你需要设置hibernate.proxool.*系列属性。

Application Server内使用时,Hibernate可以从JNDI中注册的javax.sql.Datasource取得连接。需要设置如下属性:

Table 3.2. Hibernate 数据源(Datasource)属性

属性名 用途

hibernate.connection.datasource datasource JNDI 名字

hibernate.jndi.url JNDI 提供者的URL (可选)

hibernate.jndi.class JNDI InitialContextFactory的类名 (可选)

hibernate.connection.username 数据库用户名 (可选)

hibernate.connection.password 数据库密码 (可选)