当前位置: 首页 > 图文教程 > Java技术 > 数据库持久层 > 数据库持久层:hibernate的配置信息
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 对象的保存和读取。考虑到读者可
public class HibernateTest extends TestCase {
Session session = null;
/**
* JUnit中setUp方法在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,如Eclipse、Intellij IDEA 和JBuilder 中都内置了JUnit支持。下面是Eclipse
中运行该代码的结果(在Run菜单中选择Run as -> JUnit Test即可):
现在我们已经成功实现了一个简单的TUser 实例的保存和读取。可以看到,程序中通过
少量代码实现了Java 对象和数据库数据的同步,同时借助Hibernate的有力支持,轻松实现
了对象到关系型数据库的映射。
相对传统的JDBC数据访问模式,这样的实现无疑更符合面向对象的思想,同时也大大
提高了开发效率。
评论 (0) All