Hibernate配置文件详解

Hibernate配置方式

Hibernate给人的感觉是灵活的,要达到同一个目的,咱们可使用几种不一样的办法。就拿Hibernate配置来讲,经常使用的有以下三种方式,任选其一。 java

  1. 在 hibernate.cfg.xml 中加入元素 <property>、<mapping>,放置在类路径(classpath)的根目录下。
  2. 将 hibernate.properties 放置放在类路径的根目录下。
  3. 可编程的配置方式,即在程序中配置Hibernate的启动参数、加载映射文件,须要用Configuration接口来实现这一方式。

使用hibernate.cfg.xml是我比较喜欢的方式,一方面xml天生的优点——良好的可读性,让配置的意图一目了然。另外一方面这是官方推荐使用的,若是同时在hibernate.cfg.xml和hibernate.properties对Hibernate进行了配置,那么前者将覆盖后者。 mysql

hibernate.properties能够很是的简洁明了,而且有一种linux配置文件的风格。以#开始一行的注释,用键值对的方式存储配置参数。 linux

对于这两种方式,结果都是同样的。只是看我的喜爱。关于配置参数咱们稍后讨论。 sql

Configuration类

org.hibernate.cfg.Configuration实例的做用是对Hibernate进行配置,以及对它进行启动。在Hibernate的启动过程当中,Configuration类的实例首先读取Hibernate配置文件,加载配置信息,而后加载映射文件,建立一个SessionFactory对象。 数据库

实例被设计成启动期间(startup-time)对象,一旦SessionFactory 建立完成它就被丢弃了。 编程

要使用一个Configuration对象,要为它设置两个方面的内容: 缓存

  • 数据库链接属性
  • hbm.xml或pojo类

Configuration经常使用操做函数 安全

1.加载Hibernate配置文件session

Configuration cfg=new Configuration().configure("/etc/hibernate.cfg.xml");

或者并发

Configuration cfg=new Configuration().configure("/etc/hibernate.properties");

2.为Configuration指定映射文件

cfg.addResource("test/User.hbm.xml");

3.为Configuration指定POJO类,Order.hbm.xml根Order.java一个目录

cfg.addClass(test.Order.class);

4.为Configuration指定Hibernate配置属性,固然咱们加载了配置文件就不能使用这个方法了

Configuration cfg = new Configuration()
    .addClass(test.User.class)
    .setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect")
    .setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test")
    .setProperty("hibernate.order_updates", "true");

5.得到SessionFactory

SessionFactory sessions = cfg.buildSessionFactory();

当全部映射定义被 Configuration 解析后,应用程序必须得到一个用于构造org.hibernate.Session 实例的工厂SessionFactory。这个工厂将被应用程序的全部线程共享,线程安全的全局对象,只须要被实例化一次。单例模式。

Hibernate 容许你的应用程序建立多个SessionFactory 实例。这对 使用多个数据库的应用来讲颇有用。

hibernate.cfg.xml

hibernate.cfg.xml在文档开头的DTD(文档类型定义)是很复杂的。咱们并不须要去理会和记忆他。你能够直接copy它。

hibernate.cfg.xml文档以<hibernate-configuration>为根元素,你能够在其子元素<session-factory>中

  • 加入<property>元素来配置各类参数。
  • 加入<mapping>加载映射文件,resource表明映射文件的路径。

一个hibernate.cfg.xml例子:

<?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>
        <!-- Database connection settings -->
        <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="connection.username">root</property>
        <property name="connection.password">klguang@mysql</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">10</property>
        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>
        <!-- Disable the second-level cache -->
        <property name="cache.provider_class">
            org.hibernate.cache.NoCacheProvider
        </property>
        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>
        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">update</property>
        <property name="javax.persistence.validation.mode">none</property>
        <mapping resource="hbm/User.hbm.xml" />
        <mapping resource="hbm/Event.hbm.xml" />
        <mapping resource="hbm/Person.hbm.xml" />
    </session-factory>
</hibernate-configuration>

hibernate.properties

对于hibernate.properties做为配置文件的方式,我是不推荐新手使用的。由于,其可读性差,另外众多的配置参数会让初学者不知道如何下手。

在Hibernate发布包的project/etc/,提供了一个hibernate.properties文件,该文件列出了Hibernate 的全部配置参数,但都是用#注释掉了。每一行是一个配置参数,以键值对的方式存在,空格前是key,空格后是value,咱们应该将空格改成等号。

对每个配置参数,文件里都有详细的解释。咱们只须要将见面#去掉,并修改其value就能够了。

一个hibernate.properties例子:

#数据库使用的驱动类
hibernate.connection.driver_class=com.mysql.jdbc.Driver
#数据库链接串
hibernate.connection.url=jdbc:mysql://localhost:3306/db
#数据库链接的用户名
hibernate.connection.username=user
#数据库链接的密码
hibernate.connection.password=password
#数据库使用的方言
hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect
#是否打印SQL语句
hibernate.show_sql=true
javax.persistence.validation.mode=none

hibernate.properties没有提供加载映射文件的方式。所以须要经过Configuration的.addResource()方法来加载映射文件或POJO类,Hibernate会自动找到另外一方,前提映射文件和POJO类在同一包(目录)中。

Configuration cfg = new Configuration();
cfg.configure("/etc/hibernate.properties");
cfg.addResource("test/User.hbm.xml");
cfg.addClass(test.Order.class);

Hibernate配置参数详解

Hibernate JDBC 属性

属性名

用途

hibernate.connection.driver_class

JDBC driver class

hibernate.connection.url

JDBC URL

hibernate.connection.username

database user

hibernate.connection.password

 数据库用户密码

hibernate.connection.pool_size

maximum number of pooled connections

Hibernate 数据源属性

属性名

用途

hibernate.connection.datasource

数据源 JNDI 名字

hibernate.jndi.url JNDI

提供者的 URL(可选)

hibernate.jndi.class JNDI

InitialContextFactory 类(可选)

hibernate.connection.username

 数据库用户(可选)

hibernate.connection.password

数据库密码(可选)

可选的配置属性

有大量属性能用来控制 Hibernate 在运行期的行为。它们都是可选的,并拥有适当的默认值。

属性名

用途

可选值

()内为默认

hibernate.dialect

容许 Hibernate 针对特定的关系数据库生成优化的 SQL org.hibernate.dialect.Dialect 类名。

例如:org.hibernate.dialect.MySQLDialect

 

hibernate.show_sql

输出全部 SQL 语句到控制台。

true|false

false

hibernate.format_sql

log console 中打印出更漂亮的 SQL

true|false

false

hibernate.default_catalog

 在生成的 SQL 中,将给定的 catalog 附加于非全限定名的表名上

 

hibernate.session_factory_name

org.hibernate.SessionFactory 建立后,将自动使用这个名字绑定到 JNDI 中。

 

hibernate.max_fetch_depth

为单向关联(一对一,多对一)的外链接抓取(outer join fetch)树设置最大深度。

03

hibernate.default_batch_fetch_size

  Hibernate 关联的批量抓取设置默认数量。

4816

hibernate.default_entity_mode

 为由这个 SessionFactory 打开的全部 Session指定默认的实体表现模式。

dynamic-mapdom4jpojo

hibernate.order_updates

 强制 Hibernate 按照被更新数据的主键,为SQL 更新排序。这么作将减小在高并发系统中事务的死锁。

true|false

 

hibernate.generate_statistics

 若是开启,Hibernate 将收集有助于性能调节的统计数据。

true|false

 

hibernate.use_identifier_rollback

若是开启,在对象被删除时生成的标识属性将被重设为默认值。

true|false

 

hibernate.use_sql_comments

若是开启,Hibernate 将在 SQL 中生成有助于调试的注释信息,默认值为 false

true|false

false

Hibernate JDBC 和链接(connection)属性、Hibernate 缓存属性、Hibernate 事务属性等主要用于提高性能,而且Hibernate有适当的默认值。入门者能够忽略这些设置,等学到必定阶段,你能够参考官方文档进行适当配置。

相关文章
相关标签/搜索