使用Hibernate框架轻松连接数据库(蓝桥杯软件大赛培训教材-Java方向)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 搭建项目框架

操作系统:Windows XP/Windows 7。

开发环境:Eclipse3.6,JDK6,Servlet3.0。

Web服务器:Tomcat7。

数据库服务器:Oradelog。

1.3.1 创建项目并导入jar包

(1)在Eclipse中创建一个Dynamic Web Project,取名5iJob。

(2)下载Hibernate,可以在http://sourceforge.net/projects/hibernate/files/hibernate4/页面找到下载链接,在页面下方选择要下载的版本,需要下载的是hibernate-release-4.2.0.Final.zip。

(3)解压后,打开lib→required目录下面的jar包,将其导入到工程中。

(4)导入数据库的JDBC驱动包,本项目采用oracle10g作为数据库,使用ojdbc14.jar(也可以使用Oracle11g的驱动包ojdbc6.jar,该包支持JDK6.0)。

(5)如Hibernate官方文档所说,Hibernate的连接池不能应用于产品环境(可用于开发和测试环境),建议使用第三方的更为优秀的连接池。这里采用c3p0数据库连接池,需要下载并导入c3p0-0.9.2.1.jar和mchange-commons-java-0.2.3.4.jar。

(6)考虑到JSP中要使用JSTL,所以jstl.jar和standard.jar也是需要的,所有导入到项目中的jar包如图1.5所示。

图1.5 准备阶段所需jar包

1.3.2 编写配置文件

创建hibernate.cfg.xml,保存在工程的src目录下,编写数据库连接的配置信息,具体代码如下:

        <?xml version='1.0' encoding='utf-8'?>
        <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
        <hibernate-configuration>
            <session-factory>
                <!-- 数据库连接URL-->
                <property name="connection.url">jdbc:oracle:thin:@localhost:1521:XE</property>
                <!-- 数据库用户名 -->
                <property name="connection.username">oa</property>
                <!-- 数据库密码 -->
                <property name="connection.password">oa123</property>
                <!-- 数据库JDBC驱动类名 -->
                <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
                <!-- 数据库方言 -->
                <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
                <!--ddl语句自动建表 -->
                <property name="hbm2ddl.auto">none</property>
                <!-- 是否输出Hibernate生成的SQL语句,开发阶段一般需要开启 -->
                <property name="show_SQL">true</property>
                <!-- 是否对输出SQL进行格式化 -->
                <property name="format_SQL">true</property>
                <!-- 连接池配置 -->
                <property name="hibernate.connection.provider_class">
                    org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider
                </property>
                <!-- 这是C3P0随时准备好的最少的JDBC连接数量 -->
                <property name="hibernate.c3p0.min_size">5</property>
                <!-- 连接池中JDBC连接的最大数量 -->
                <property name="hibernate.c3p0.max_size">20</property>
                <!-- 超时周期,在它之后,闲置连接将从池中移除 -->
                <property name="hibernate.c3p0.timeout">300</property>
                <!-- 最多高速缓存100个预编译语句,该属性是使Hibernate获得较好性能的要素 -->
                <property name="hibernate.c3p0.max_statements">100</property>
                <!-- 连接被自动验证前,以秒为单位的闲置时间 -->
                <property name="hibernate.c3p0.idle_test_period">3000</property>
                <!-- 注册ORM实体类映射文件-->
                <mapping resource="实体类映射文件路径" />
                …
            </session-factory>
        </hibernate-configuration>

以上Hibernate配置文件由四部分信息组成:

(1)数据库连接信息,包括驱动程序类名、连接URL、用户名和密码。

(2)Hibernate相关特性,包括dialect(方言)、show_SQL(输出SQL语句到控制台)、format_SQL(格式化SQL语句)。

(3)连接池相关信息。

(4)实体类映射文件,实体类与数据库表之间的逻辑映射。

这里有必要介绍一下dialect(方言)。属性<property name="dialect">…</property>指定的是数据库方言。用户应当根据正在使用的数据库将hibernate.dialect属性设置成对应的数据库方言(org.hibernate.dialect.Dialect子类)。本例中,由于数据库采用Oracle10g,所以该项被配置为org.hibernate.dialect. Oracle10gDialect。

ORM有自动的SQL生成机制,大部分时候,数据库操作都是通过标准SQL来完成,但有时需要使用数据库特有的语句,如分页语句、函数等。方言正是用于这些时候,指导Hibernate如何生成SQL。Hibernate采用方言属性,可以屏蔽各数据库之间的差异,使得应用程序更加方便地从一种数据库迁移到另一种数据库。

1.3.3 测试连接及基本配置

创建/5iJob/src/org/bd/hibernate/test/HibernateTest.java,测试配置是否正确。具体代码如下:

        import org.hibernate.SessionFactory;
        import org.hibernate.cfg.Configuration;
        import org.hibernate.service.ServiceRegistry;
        import org.hibernate.service.ServiceRegistryBuilder;
        public class HibernateTest {
            public static void main(String[] args) {
                //获取配置,默认读取classpath根目录下名为hibernate.cfg.xml的文件
                Configuration cfg = new Configuration().configure();
                ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).
                buildServiceRegistry();
                //创建SessionFactory
                SessionFactory factory = cfg.buildSessionFactory(serviceRegistry);
                //获取Session
                System.out.println(factory.openSession());
            }
        }

运行这个类,如果没有抛出异常,打印出信息,则证明已经可以通过Hibernate来连接数据库了。