和风细雨

世上本无难事,心以为难,斯乃真难。苟不存一难之见于心,则运用之术自出。

Hibernate的配置文件

获取Hibernate

在创建Hibernate项目之前,我们需要从网站获得最新的Hibernate版本。Hibernate主页是www.hibernate.org,找到其菜单中的download连接,选择最新的Hibernate版本即可。下载后将其解开到一个目录中。
右边是解开后的主要目录。其中最重要的是hibernate.jar,它包含全部框架代码;lib目录,包括Hibernate的所有依赖库;doc目录,包括JavDocs和参考文档。

Hibernate的配置文件

Hibernate能够与从应用服务器(受控环境,如Tomcat,Weblogic,JBoss)到独立的应用程序(非受控环境,如独立应用程序)的各种环境和谐工作,这在一定程度上要归功于其配置文件hibernate.cfg.xml,通过特定的设置Hibernate就能与各种环境配合。右边是hibernate.cfg.xml的一个示例。
配置Hibernate的所有属性是一项艰巨的任务,下面将依此介绍Hibernate部署将用到的基本配置。

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
  <session-factory name="java:comp/env/hibernate/SessionFactory">
    <!-- JNDI数据源设置 -->
    <property name="connection.datasource">
      java:comp/env/jdbc/myoracle
    </property>

    <!-- SQL方言,org.hibernate.dialect.OracleDialect适合所有Oracle数据库 -->
    <property name="dialect">
      org.hibernate.dialect.OracleDialect
    </property>

    <!-- 显示SQL语句 -->
    <property name="show_sql">true</property>
   
    <!-- SQL语句整形 -->
    <property name="format_sql">true</property>
   
    <!-- 启动时创建表.这个选项在第一次启动程序时放开,以后切记关闭 -->
        <!-- <property name="hbm2ddl.auto">create</property>  -->
           
    <!-- 持久化类的配置文件 -->
    <mapping resource="com/sitinspring/domain/User.hbm.xml" />
    <mapping resource="com/sitinspring/domain/Privilege.hbm.xml" />
    <mapping resource="com/sitinspring/domain/Article.hbm.xml" />
    <mapping resource="com/sitinspring/domain/Record.hbm.xml" />
  </session-factory>
</hibernate-configuration>

使用Hibernate管理的JDBC连接

右边配置文件中的Database connection settings 部分制定了Hibernate管理的JDBC连接, 这在非受控环境如桌面应用程序中很常见。
其中各项属性为:
connection.driver_class:用于特定数据库的JDBC连接类
connection.url:数据库的完整JDBC URL
connection.username:用于连接到数据库的用户名
connection.password:用户密码

这种方案可用于非受控环境和基本测试,但不宜在生产环境中使用。

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
        <property name="connection.url">jdbc:hsqldb:hsql://localhost</property>
        <property name="connection.username">sa</property>
        <property name="connection.password"></property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.HSQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        。。。。。。。。

    </session-factory>

</hibernate-configuration>

使用JNDI 数据源

在受控环境中,我们可以使用容器提供的数据源,这将使数据库访问更加快捷,右边就是使用Tomcat提供的数据源的配置部分。

附:Server.Xml中的数据源设置

<Context path="/MyTodoes" reloadable="true" docBase="E:\Program\Programs\MyTodoes" workDir="E:\Program\Programs\MyTodoes\work" >
 <Resource name="jdbc/myoracle" auth="Container"
          type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
          url="jdbc:oracle:thin:@192.168.104.173:1521:orcl"
          username="hy" password="123456" maxActive="20" maxIdle="10"
          maxWait="-1"/>
</Context>

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
  <session-factory name="java:comp/env/hibernate/SessionFactory">
    <!-- JNDI数据源设置 -->
    <property name="connection.datasource">
      java:comp/env/jdbc/myoracle
    </property>

    <!-- SQL方言,org.hibernate.dialect.OracleDialect适合所有Oracle数据库 -->
    <property name="dialect">
      org.hibernate.dialect.OracleDialect
    </property>


</hibernate-configuration>

数据库方言

Dialect属性能告知Hibernate执行特定的操作如分页时需要使用那种SQL方言,如MySql的分页方案和Oracle的大相径庭,如设置错误或没有设置一定会导致问题。

附录:常见的数据库方言
DB2 :org.hibernate.dialect.DB2Dialect
MySQL :org.hibernate.dialect.MySQLDialect
Oracle (any version) :org.hibernate.dialect.OracleDialect
Oracle 9i/10g :org.hibernate.dialect.Oracle9Dialect
Microsoft SQL Server :org.hibernate.dialect.SQLServerDialect
Sybase Anywhere :org.hibernate.dialect.SybaseAnywhereDialect

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
  <session-factory name="java:comp/env/hibernate/SessionFactory">
    <!-- JNDI数据源设置 -->
    <property name="connection.datasource">
      java:comp/env/jdbc/myoracle
    </property>

    <!-- SQL方言,org.hibernate.dialect.OracleDialect适合所有Oracle数据库 -->
    <property name="dialect">
      org.hibernate.dialect.OracleDialect
    </property>

    <!-- 显示SQL语句 -->
    <property name="show_sql">true</property>
   
    <!-- SQL语句整形 -->
    <property name="format_sql">true</property>
   
</hibernate-configuration>

其它属性

show_sql:它可以在程序运行过程中显示出真正执行的SQL语句来,建议将这个属性始终打开,它将有益于错误诊断。

format_sql:将这个属性设置为true能将输出的SQL语句整理成规范的形状,更方便用于查看SQL语句。

hbm2ddl.auto:将其设置为create能在程序启动是根据类映射文件的定义创建实体对象对应的表,而不需要手动去建表,这在程序初次安装时很方便。
如果表已经创建并有数据,切记关闭这个属性,否则在创建表时也会清除掉原有的数据,这也许会导致很严重的后果。
从后果可能带来的影响来考虑,在用户处安装完一次后就应该删除掉这个节点

<hibernate-configuration>
  <session-factory name="java:comp/env/hibernate/SessionFactory">
。。。。。。

    <!-- 显示SQL语句 -->
    <property name="show_sql">true</property>
   
    <!-- SQL语句整形 -->
    <property name="format_sql">true</property>
   
    <!-- 启动时创建表.这个选项在第一次启动程序时放开,以后切记关闭 -->
        <!-- <property name="hbm2ddl.auto">create</property>  -->
           
。。。。。。
</hibernate-configuration>

映射定义

在hibernate.cfg.xml中,还有一个重要部分就是映射定义,这些文件用于向Hibernate提供关于将对象持久化到关系数据库的信息。
一般来说,领域层有一个领域对象就有一个映射文件,建议将它们放在同一目录(domain)下以便查阅和修改,映射文件的命名规则是:持久化类的类名+.hbm.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
  <session-factory name="java:comp/env/hibernate/SessionFactory">
    <!-- JNDI数据源设置 -->
    <property name="connection.datasource">
      java:comp/env/jdbc/myoracle
    </property>

。。。。。。
           
    <!-- 持久化类的配置文件 -->
    <mapping resource="com/sitinspring/domain/User.hbm.xml" />
    <mapping resource="com/sitinspring/domain/Privilege.hbm.xml" />
    <mapping resource="com/sitinspring/domain/Article.hbm.xml" />
    <mapping resource="com/sitinspring/domain/Record.hbm.xml" />
  </session-factory>
</hibernate-configuration>

posted on 2008-04-30 16:40 和风细雨 阅读(2607) 评论(0)  编辑  收藏 所属分类: Hibernate


只有注册用户登录后才能发表评论。


网站导航: