当前位置: 首页 > 图文教程 > Java技术 > 数据库持久层 > 数据库持久层:hibernate的配置信息

数据库持久层
数据库持久层:Hibernate中cascade和inverse的用法
数据库持久层:hibernate的配置信息
数据库持久层:谈hibernate的持续性
数据库持久层:小议Hibernate查询及数据检索
数据库持久层:浅谈hibernate中的Session
数据库持久层:小编浅谈hibernate中抓取策略
数据库持久层:iBATIS框架中Serializable可读写缓存及存储类型
数据库持久层:ibatis高级特性
数据库持久层:为持久层编写单元测试
数据库持久层:小编浅谈ibatis基础语义
数据库持久层:Hibernate中与关联有关的问题
数据库持久层:浅谈ORM(对象关系映射)
总结JDBC连接SQLServer的错误Error establishing socket
数据库持久层:iBATIS的OR 映射
数据库持久层:DAO和ODBC的相似之处
数据库持久层:小编浅谈DAO的特色
数据库持久层:小编浅谈XDoclet 与Hibernate 映射
数据库属性hibernate.dialect的设置

数据库持久层:hibernate的配置信息


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 98 ::
收藏到网摘: n/a

      java的web框架Hibernate同时支持xml 格式的配置文件,以及传统的properties文件配置方式,不过这

里建议采用xml 型配置文件。xml配置文件提供了更易读的结构和更强的配置能力,可以直

接对映射文件加以配置,而在properties文件中则无法配置,必须通过代码中的Hard Coding

加载相应的映射文件。下面如果不作特别说明,都指的是基于xml 格式文件的配置方式。

配置文件名默认为“hibernate.cfg.xml”(或者hibernate.properties),Hibernate 初始化期

间会自动在CLASSPATH 中寻找这个文件,并读取其中的配置信息,为后期数据库操作做好

准备。

配置文件应部署在CLASSPATH 中,对于Web 应用而言,配置文件应放置在在

\WEB-INF\classes 目录下。

一个典型的hibernate.cfg.xml配置文件如下:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-configuration

PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-2.0.

dtd">

<hibernate-configuration>

<!- SessionFactory 配置-->

<session-factory>

<!- 数据库URL -->

<property name="hibernate.connection.url">

jdbc:mysql://localhost/sample

</property>

<!- 数据库JDBC驱动-->

<property name="hibernate.connection.driver_class">

org.gjt.mm.mysql.Driver

</property>

<!- 数据库用户名-->

<property name="hibernate.connection.username">

User

</property>

<!- 数据库用户密码-->

<property name="hibernate.connection.password">

Mypass

</property>

<!--dialect ,每个数据库都有其对应的Dialet以匹配其平台特性-->

<property name="dialect">

net.sf.hibernate.dialect.MySQLDialect

</property>

<!- 是否将运行期生成的SQL输出到日志以供调试-->

<property name="hibernate.show_sql">

True

</property>

<!- 是否使用数据库外连接-->

<property name="hibernate.use_outer_join">

True

</property>

<!- 事务管理类型,这里我们使用JDBC Transaction -->

<property name="hibernate.transaction.factory_class">

net.sf.hibernate.transaction.JDBCTransactionFactory

</property>

<!映射文件配置,注意配置文件名必须包含其相对于根的全路径-->

<mapping resource="net/xiaxin/xdoclet/TUser.hbm.xml"/>

<mapping resource="net/xiaxin/xdoclet/TGroup.hbm.xml"/>

</session-factory>

</hibernate-configuration>

一个典型的hibernate.properties配置文件如下:

hibernate.dialect net.sf.hibernate.dialect.MySQLDialect

hibernate.connection.driver_class org.gjt.mm.mysql.Driver

hibernate.connection.driver_class com.mysql.jdbc.Driver

hibernate.connection.url jdbc:mysql:///sample

hibernate.connection.username user

hibernate.connection.password mypass

第一段代码

上面我们已经完成了Hiberante 的基础代码,现在先从一段最简单的代码入手,感受一

Hibernate所提供的强大功能。

下面这段代码是一个JUnit TestCase,演示了TUser 对象的保存和读取。考虑到读者可能没有JUnit的使用经验,代码中加入了一些JUnit相关注释。

public class HibernateTest extends TestCase {

Session session = null;

/**

* JUnitsetUp方法在TestCase初始化的时候会自动调用

* 一般用于初始化公用资源

*此例中,用于初始化Hibernate Session

*/

protected void setUp(){

try {

/**

*采用hibernate.properties配置文件的初始化代码:

* Configuration config = new Configuration();

* config.addClass(TUser.class);

*/

//采用hibernate.cfg.xml配置文件

//请注意初始化Configuration时的差异:

// 1.Configuration的初始化方式

// 2.xml文件中已经定义了Mapping文件,因此无需再Hard Coding导入

// POJO文件的定义

Configuration config = new Configuration().configure();

SessionFactory sessionFactory =

config.buildSessionFactory();

session = sessionFactory.openSession();

} catch (HibernateException e) {

e.printStackTrace();

}

}

/**

*setUp方法相对应,JUnit TestCase执行完毕时,会自动调用tearDown方法

*一般用于资源释放

*此例中,用于关闭在setUp方法中打开的Hibernate Session

*/

protected void tearDown(){

try {

session.close();

} catch (HibernateException e) {

e.printStackTrace();

}

}

/**

* 对象持久化(Insert)测试方法

*

* JUnit中,以test作为前缀的方法为测试方法,将被JUnit自动添加

* 到测试计划中运行

*/

public void testInsert(){

try {

TUser user = new TUser();

user.setName("Emma");

session.save(user);

session.flush();

} catch (HibernateException e) {

e.printStackTrace();

Assert.fail(e.getMessage());

}

}

/**

* 对象读取(Select)测试

* 请保证运行之前数据库中已经存在name=Erica的记录

*/

public void testSelect(){

String hql=

" from TUser where name='Erica'";

try {

List userList = session.find(hql);

TUser user =(TUser)userList.get(0);

Assert.assertEquals(user.getName(),"Erica");

} catch (HibernateException e) {

e.printStackTrace();

Assert.fail(e.getMessage());

}

}

}

主流IDE,如EclipseIntellij IDEA JBuilder 中都内置了JUnit支持。下面是Eclipse

中运行该代码的结果(在Run菜单中选择Run as -> JUnit Test即可):

现在我们已经成功实现了一个简单的TUser 实例的保存和读取。可以看到,程序中通过

少量代码实现了Java 对象和数据库数据的同步,同时借助Hibernate的有力支持,轻松实现

了对象到关系型数据库的映射。

相对传统的JDBC数据访问模式,这样的实现无疑更符合面向对象的思想,同时也大大

提高了开发效率。