Hibernate 配置详解(1)

Hibernate提供了hibernate.properties文件来对hibernate进行一些配置,当然,几乎所有的配置都有对应的默认值。理解hibernate.properties不仅能更好的使用Hibernate,还能通过配置文件,了解一下hibernate内部的一些运行机制。下面就详细的来介绍hibernate中提供的配置项。注意,在etc/hibernate.properties文件中列出的hibernate配置项并不是完整的配置项,有一些可能需要在org.hibernate.cfg.AvailableSettings中查询。

hibernatemanual文档中,3.4节有详细的hibernate配置项说明,下面我们会更完整的来看看这些配置项的功能,及在代码中的使用。

首先,无论使用hibernate4.2ServiceRegistry启动或者直接使用hibernate.cfg.xml启动hibernate,都可以通过在classpath下放置一个hibernate.properties文件来配置hibernate

 

一.Hibernate配置


1) hibernate.dialect

用于配置数据库方言。必须是org.hibernate.dialect.Dialect子类的类全限定名。该方言对象用于针对具体的数据库生成不同的SQL。一般情况下,其实这个dialect都可以不用手动指定,hibernate会根据数据库的metadata来自动选择相应的方言。

大家可以在StandardDialectResolverresolveDialectInternal方法中看到:

protected Dialect resolveDialectInternal(DatabaseMetaData metaData) throws SQLException {
String databaseName = metaData.getDatabaseProductName();
if ( "MySQL".equals( databaseName ) ) {
return new MySQLDialect();
}
//..其他省略
}

如果没有设置方言,hibernate会自动的根据DatabaseMetaData选择合适的驱动。

 

2) hibernate.show_sql

允许设置值为true或者false。将所有SQL语句输出到控制台,类似的,也可以通过设置log4j.properties文件,将log4j.logger.org.hibernate.SQL DEBUG,也可以达到同样的效果。一般建议在开发过程当中设置为true,可以发现很多hibernate有趣的东西。在生产环境最好就设置为false

比如,把hibernate.show_sql去掉,添加log4j.jar包(如果是hibernate3.5,需要再添加一个slf4j-log4j-xxx.jar包),在classpath下面添加一个log4j.xml文件,添加如下内容:

 

<log4j:configuration>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="conversionPattern" value="%r [%t] %p %c %x - %m%n"/>
</layout>
</appender>

<logger name="org.hibernate.SQL">
<level value="DEBUG"></level>
<appender-ref ref="console"/>
</logger>

<root>
<level value="ERROR" />
</root>

</log4j:configuration>

再次运行,就可以看到同样输出SQL文件。

 

3)  hibernate.format_sql

允许设置值为true或者false,如果为true,打印在控制台中的SQL语句格式会更容易查看。这个选项对使用Log监控SQL同样有效。

 

4)  hibernate.default_schema

允许设置在hibenate中映射的表默认的schema/tablespace名称。在支持schema或表空间的数据库中有用。比如,在hibernate.properties文件中添加:

hibernate.default_schema hibernate

那么生成的SQL就会是这样:

    insert 
    into
        hibernate.USER
        (name, age, borndate, married) 
    values
        (?, ?, ?, ?)
//----------------------------------------------------------------
    select
        user0_.id as id1_0_,
        user0_.name as name2_0_,
        user0_.age as age3_0_,
        user0_.borndate as borndate4_0_,
        user0_.married as married5_0_ 
    from
        hibernate.USER user0_ 
    where
        user0_.married=?

当然,在映射文件中,也可以通过为class元素设置schema属性来覆盖默认的schema名称。比如:

<class name="User" table="USER" schema="scott">
<id name="id" access="field">
<generator class="native" />
</id>

<property name="name" column="name" />
<property name="age">
<column name="age" default="25" check="age > 10 and age < 100" />
</property>

<property name="bornDate" column="borndate"/>
<property name="married" column="married" type="yes_no"/>
</class>
     那么生成的SQL会变成:

    insert 
    into
        scott.USER
        (name, age, borndate, married) 
    values
        (?, ?, ?, ?)

5) hibernate.default_catalog

允许设置在hibenate中映射的表默认的catalog名称(catalog可以简单理解为对数据库服务器在本地访问的一个别名,在MySQL里面没有这个概念,但是可以理解为我们在navicat中创建的一个链接名称就叫一个catalog,在DB2中有这个概念,在Oracle中可以把我们添加的本地命名当作一个catalog)。在支持schema或表空间的数据库中有用。比如,在hibernate.properties文件中添加:

hibernate.default_catalog orcl

那么生成的SQL就会是这样:

 insert 
    into
        orcl.hibernate.USER //注意前面是catalog,后面才是schema
        (name, age, borndate, married) 
    values
        (?, ?, ?, ?)

当然,在映射文件中也可以单独设置catalog

<class name="User" table="USER" catalog="orcl">



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值