hibernate是java中常见的一种ORM解决方案,可以实现数据库类型无差别化,以对象方式快速访问数据,极大的提高开发效率。由于hibernate框架本身的配置选项和应用十分庞大复杂,因此这里只对hibernate的基本配置使用加以说明。
首先当然是下载Hibernate框架。可以从官方站点上下载最新的版本,下载地址http://www.hibernate.org/downloads,本文配置基于hibernate3.0。需要引用的jar包主要包括:hibernate3.jar、antlr-2.7.6.jar、commons-collections-3.1.jar、dom4j-1.6.1.jar、javassist-3.9.0.GA.jar、jta-1.1.jar、slf4j-api-1.5.8.jar,此外还有cglib-2.2.jar、c3p0-0.9.1.jar、ehcache-1.2.3.jar等一些可选的包。
hibernate的一切对象都从Configuration对象开始构建,Configuration要求使用配置文件来初始化内部属性,所以启动hibernate的条件就是配置文件。配置文件只要符合hibernate规范即可,可以是任意名称放在任意位置,也可以以编程方式加载配置。但hibernate的缺省配置文件名称为hibernate.cfg.xml,缺省配置文件加载位置在classes目录下。对于web站点,配置加载路径就是在root/WEB-INF/classes/hibernate.cfg.xml。此外,配置文件也可以是properties格式。下面是一个xml格式的示例配置文件:
1: <?xml version='1.0' encoding='utf-8'?>
2: <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
3: "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
4: <hibernate-configuration>
5: <session-factory>
6: <!--连接字符串-->
7: <property name="connection.url">jdbc:sqlserver://127.0.0.1;DatabaseName=mydb;SelectMethod=cursor</property>
8: <!--连接数据库的用户名-->
9: <property name="connection.username">sa</property>
10: <!--数据库用户密码-->
11: <property name="connection.password">sa</property>
12: <!--数据库驱动-->
13: <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
14: <!--选择使用的方言-->
15: <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
16: <!--显示执行的SQL语句-->
17: <property name="show_sql">true</property>
18: <!--JDBC连接池(使用内置的连接池)-->
19: <property name="connection.pool_size">1</property>
20: <!--设置Hibernate自动管理上下文的策略-->
21: <property name="current_session_context_class">thread</property>
22: <!--在启动时删除并重新创建数据库-->
23: <property name="hbm2ddl.auto">update</property>
24: <mapping resource="hbm/TableX.hbm.xml"/>
25: </session-factory>
26: </hibernate-configuration>
以上配置文件是使用SQLServer数据库的配置,除需要配置数据库链接以外,还需要配置数据库驱动和数据库方言。mapping映射文件存放在classes/hbm目录下。
然后使用Eclipse的hibernate mapping file向导创建TableX.hbm.xml配置文件和对应的实体类com.test.entity.TableX,数据表中的大多数数据类型都是被hibernate支持的,但需要注意的是数据表必须存在主键,否则hibernate是无法工作的。
当映射文件和实体类创建完成以后,就可以在类中使用hibernate来做数据查询了,示例查询代码如下:
1: package com.test.hibernate;
2:
3: import java.util.List;
4: import org.hibernate.Query;
5: import org.hibernate.Session;
6: import org.hibernate.SessionFactory;
7: import org.hibernate.cfg.Configuration;
8: import com.test.entity.TableX;
9:
10: public class HibernateSample {
11: public void doHibernateSample(){
12: Configuration cfg = new Configuration().configure();
13: SessionFactory sessionFactory = cfg.buildSessionFactory();
14: Session session = sessionFactory.openSession();
15: String hql = "from TableX where name= ?";
16: Query query = session.createQuery(hql);
17: query.setParameter(0, "001"); //为参数赋值
18: List<TableX> allX = (List<TableX>)query.list();//执行查询,返回对象集合
19: for(TableX x : allX){
20: x.getName();
21: }
22: //session.flush();
23: session.close();
24: }
25: }
只需简单的配置就可以使用hibernate提供的强大功能,完全屏蔽底层数据库操作,以对象的方式存储和查询数据了。最后附带常用数据库的数据库驱动配置和数据库方言配置:
#SqlServer2000
jdbc.driverClassName=com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc.dialect=org.hibernate.dialect.SQLServerDialect
#SqlServer2005
jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.dialect=org.hibernate.dialect.SQLServerDialect
#Oracle
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.dialect=org.hibernate.dialect.Oracle10gDialect
#MySQL
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.dialect=org.hibernate.dialect.MySQL5Dialect
#HSQL
dbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.dialect=org.hibernate.dialect.HSQLDialect
完