1. 程式人生 > >hibernate配置

hibernate配置

cache 記錄 .sql 生成 dia exe 讀者 map proto

hibernate配置文件hibernate.cfg.xml的詳解:http://www.cnblogs.com/jqyp/archive/2010/06/28/1766851.html hibernate.cfg.xml配置:http://www.blogjava.net/baoyaer/articles/172642.html spring整合hibernate:http://blog.csdn.net/rudyone/article/details/7247596

<!--標準的XML文件的起始行。version=‘1.0‘表明XML的版本號,encoding=‘gb2312‘表明XML文件的編碼方式-->
<?xml version=‘1.0‘ encoding=‘gb2312‘?

>
<!--表明解析本XML文件的DTD文檔位置,DTD是Document Type Definition 的縮寫,即文檔類型的定義,XML解析器使用DTD文檔來檢查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd能夠在Hibernate3.1.3軟件包中的src\org\hibernate文件夾中找到此文件-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!--聲明Hibernate配置文件的開始-->
<hibernate-configuration>
<!--表明下面的配置是針對session-factory配置的,SessionFactory是Hibernate中的一個類,這個類主要負責保存HIbernate的配置信息。以及對Session的操作-->
<session-factory>
<!--配置數據庫的驅動程序,Hibernate在連接數據庫時,須要用到數據庫的驅動程序-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver </property>
<!--設置數據庫的連接url:jdbc:mysql://localhost/hibernate,當中localhost表示mysqlserver名稱。此處為本機, hibernate是數據庫名-->
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate </hibernate>
<!--連接數據庫是username-->
<property name="hibernate.connection.username">root </property>
<!--連接數據庫是password-->
<property name="hibernate.connection.password">123456 </property>
<!--數據庫連接池的大小-->
<property name="hibernate.connection.pool.size">20 </property>
<!--是否在後臺顯示Hibernate用到的SQL語句,開發時設置為true,便於差錯。程序執行時能夠在Eclipse的控制臺顯示Hibernate的執行Sql語句。項目部署後能夠設置為false,提高執行效率-->
<property name="hibernate.show_sql">true </property>
<!--jdbc.fetch_size是指Hibernate每次從數據庫中取出並放到JDBC的Statement中的記錄條數。Fetch Size設的越大。讀數據庫的次數越少。速度越快,Fetch Size越小,讀數據庫的次數越多。速度越慢-->
<property name="jdbc.fetch_size">50 </property>
<!--jdbc.batch_size是指Hibernate批量插入,刪除和更新時每次操作的記錄數。Batch Size越大,批量操作的向數據庫發送Sql的次數越少,速度就越快,相同耗用內存就越大-->
<property name="jdbc.batch_size">23 </property>
<!--jdbc.use_scrollable_resultset是否同意Hibernate用JDBC的可滾動的結果集。

對分頁的結果集。對分頁時的設置很有幫助-->
<property name="jdbc.use_scrollable_resultset">false </property>
<!--connection.useUnicode連接數據庫時是否使用Unicode編碼-->
<property name="Connection.useUnicode">true </property>
<!--connection.characterEncoding連接數據庫時數據的傳輸字符集編碼方式。最好設置為gbk,用gb2312有的字符不全-->
<property name="connection.characterEncoding">gbk </property>

<!--hibernate.dialect 僅僅是Hibernate使用的數據庫方言,就是要用Hibernate連接那種類型的數據庫server。-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect </property>
<!--指定映射文件為“hibernate/ch1/UserInfo.hbm.xml”-->
<mapping resource="org/mxg/UserInfo.hbm.xml">
</session-factory>
</hibernate-configuration>



<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
//連接驅動
<property name="driverClassName" value="${jdbc.driverClassName}" />
//連接url,
<property name="url" value="${jdbc.url}" />
//連接username
<property name="username" value="${jdbc.username}" />
//連接password
<property name="password" value="${jdbc.password}" />
</bean>

<bean id="hbSessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation">
//hibernate配置文件位置
<value>WEB-INF/hibernate.cfg.xml </value>
</property>
<property name="configurationClass"
value="org.hibernate.cfg.AnnotationConfiguration" />
<property name="hibernateProperties">
<props>
//針對oracle數據庫的方言,特定的關系數據庫生成優化的SQL
<prop key="hibernate.dialect">
org.hibernate.dialect.OracleDialect
</prop>
//選擇HQL解析器的實現
<prop key="hibernate.query.factory_class">
org.hibernate.hql.ast.ASTQueryTranslatorFactory
</prop>
//是否在控制臺打印sql語句
<prop key="hibernate.show_sql">true </prop>
//在Hibernate系統參數中hibernate.use_outer_join被打開的情況下,該參數用來同意使用outer join來加載此集合的數據。
<prop key="hibernate.use_outer_join">true </prop>
//默認打開,啟用cglib反射優化。

cglib是用來在Hibernate中動態生成PO字節碼的,打開優化能夠加快字節碼構造的速度
<prop key="hibernate.cglib.use_reflection_optimizer">true </prop>
//輸出格式化後的sql,更方便查看
<prop key="hibernate.format_sql">true </prop>
//“useUnicode”和“characterEncoding”決定了它是否在client和server端傳輸過程中進行Encode,以及怎樣進行Encode
<prop key="hibernate.connection.useUnicode">true </prop>
//同意查詢緩存, 個別查詢仍然須要被設置為可緩存的.
<prop key="hibernate.cache.use_query_cache">false </prop>
<prop key="hibernate.default_batch_fetch_size">16 </prop>
//連接池的最大活動個數
<prop key="hibernate.dbcp.maxActive">100 </prop>
//當連接池中的連接已經被耗盡的時候。DBCP將如何處理(0 = 失敗,1 = 等待,2 = 增長)
<prop key="hibernate.dbcp.whenExhaustedAction">1 </prop>
//最大等待時間
<prop key="hibernate.dbcp.maxWait">1200 </prop>
//沒有人用連接的時候,最大閑置的連接個數
<prop key="hibernate.dbcp.maxIdle">10 </prop>
##下面是對prepared statement的處理,同上。
<prop key="hibernate.dbcp.ps.maxActive">100 </prop>
<prop key="hibernate.dbcp.ps.whenExhaustedAction">1 </prop>
<prop key="hibernate.dbcp.ps.maxWait">1200 </prop>
<prop key="hibernate.dbcp.ps.maxIdle">10 </prop>
</props>
</property>
</bean>

--------------------------------------------------------------------------------------------------------------------

Hibernate的描寫敘述文件能夠是一個properties屬性文件,也能夠是一個xml文件。以下講一下Hibernate.cfg.xml的配置。配置格式例如以下:

1. 配置數據源

在Hibernate.cfg.xml中既能夠配置JDBC。也能夠配置JNDI。在本小節中講述數據源怎樣配置,hibernate.cfg.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>

<!-- 各屬性的配置-->

<!—為true表示將Hibernate發送給數據庫的sql顯示出來 -->

<property name="show_sql">true</property>

<!-- SQL方言,這邊設定的是MySQL -->

<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>

<!-- 一次讀的數據庫記錄數 -->

<property name="jdbc.fetch_size">50</property>

<!-- 設定對數據庫進行批量刪除 -->

<property name="jdbc.batch_size">30</property>

<!—以下為JNDI的配置 -->

<!-- 數據源的名稱 -->

<property name="connection.datasource">java:comp/env/jdbc/datasourcename</property>

<!-- Hibernate的連接載入類 -->

<property name="connection.provider_class">net.sf.hibernate.connection.DatasourceConnectionProvider</property>

<property name="dialect">net.sf.hibernate.dialect.SQLServerDialect</property>

<!—映射文件 -->

<mapping resource="com/amigo/pojo/User.hbm.xml"/>

<mapping resource="com/amigo/pojo/Org.hbm.xml"/>

</session-factory>

</hibernate-configuration>

2. c3p0連接池

c3p0連接池是Hibernate推薦使用的連接池,若須要使用該連接池時,須要將c3p0的jar包增加到classpath中。

c3p0連接池的配置示比例如以下:

<?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>

<!-- 顯示實際操作數據庫時的SQL -->

<property name="show_sql">true</property>

<!-- SQL方言,這邊設定的是MySQL -->

<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>

<!--驅動程序,在興許的章節中將講述mysql、sqlserver和Oracle數據庫的配置 -->

<property name="connection.driver_class">……</property>

<!-- JDBC URL -->

<property name="connection.url">……</property>

<!-- 數據庫username -->

<property name="connection.username">user</property>

<!-- 數據庫password -->

<property name="connection.password">pass</property>

<property name="c3p0.min_size">5</property>

<property name="c3p0.max_size">20</property>

<property name="c3p0.timeout">1800</property>

<property name="c3p0.max_statements">50</property>

<!-- 對象與數據庫表格映像文件 -->

<mapping resource="com/amigo/pojo/User.hbm.xml"/>

<mapping resource="com/amigo/pojo/Org.hbm.xml"/>

</session-factory>

</hibernate-configuration>

在上述配置中。Hibernate依據配置文件生成連接,再交給c3p0管理。

3. proxool連接池

proxool跟c3p0以及dbcp不一樣,它是自己生成連接的。因此連接信息放在proxool配置文件裏。

使用它時,須要將proxool-0.8.3.jar增加到classespath中。配置舉比例如以下:

<?

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>

<!-- 顯示實際操作數據庫時的SQL -->

<property name="show_sql">true</property>

<!-- SQL方言,這邊設定的是MySQL -->

<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>

<!—proxool的配置 -->

<property name="proxool.pool_alias">pool1</property>

<property name="proxool.xml">ProxoolConf.xml</property>

<property name="connection.provider_class">net.sf.hibernate.connection.ProxoolConnectionProvider</property>

<!-- 對象與數據庫表格映像文件 -->

<mapping resource="com/amigo/pojo/User.hbm.xml"/>

<mapping resource="com/amigo/pojo/Org.hbm.xml"/>

</session-factory>

</hibernate-configuration>

在hibernate.cfg.xml的同文件夾下編寫proxool的配置文件:ProxoolConf.xml,該文件的配置實比例如以下:

ProxoolConf.xml

<?xml version="1.0" encoding="utf-8"?>

<!-- the proxool configuration can be embedded within your own application‘s.

Anything outside the "proxool" tag is ignored. -->

<something-else-entirely>

<proxool>

<alias>pool1</alias>

<!--proxool僅僅能管理由自己產生的連接-->

<!-- 驅動的url-->

<!-- jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=GBK-->

<driver-url>… </driver-url>

<!-- 驅動類。eg. com.mysql.jdbc.Driver-->

<driver-class>… </driver-class>

<driver-properties>

<!-- 數據庫username,eg. value為root-->

<property name="user" value="…"/>

<!-- 數據庫password,eg. value為root-->

<property name="password" value="…."/>

</driver-properties>

<!-- proxool自己主動偵察各個連接狀態的時間間隔(毫秒),偵察到空暇的連接就立即回收,超時的銷毀-->

<house-keeping-sleep-time>90000</house-keeping-sleep-time>

<!-- 指因未有空暇連接能夠分配而在隊列中等候的最大請求數,超過這個請求數的用戶連接就不會被接受-->

<maximum-new-connections>20</maximum-new-connections>

<!-- 最少保持的空暇連接數-->

<prototype-count>5</prototype-count>

<!-- 同意最大連接數,超過了這個連接,再有請求時。就排在隊列中等候。最大的等待請求數由maximum-new-connections決定-->

<maximum-connection-count>100</maximum-connection-count>

<!-- 最小連接數-->

<minimum-connection-count>10</minimum-connection-count>

</proxool>

</something-else-entirely>

4. dbcp連接池

在hibernate3.0中。已經不再支持dbcp了,hibernate的作者在hibernate.org中,明白指出在實踐中發現dbcp有 BUG,在某些種情會產生非常多空連接不能釋放。所以拋棄了對dbcp的支持。若須要使用dbcp。開發者還須要將commons-pool-1.2.jar 和commons-dbcp-1.2.1.jar兩個jar包增加到classpath中。dbcp與c3p0一樣,都是由hibernate建立連接的。

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?

>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 2.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<!-- 顯示實際操作數據庫時的SQL -->

<property name="show_sql">true</property>

<!-- SQL方言。這邊設定的是MySQL -->

<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>

<!--驅動程序。在興許的章節中將講述mysql、sqlserver和Oracle數據庫的配置 -->

<property name="connection.driver_class">……</property>

<!-- JDBC URL -->

<property name="connection.url">……</property>

<!-- 數據庫username,eg. root -->

<property name="connection.username">…</property>

<!-- 數據庫password, eg. root-->

<property name="connection.password">…</property>

<property name="dbcp.maxActive">100</property>

<property name="dbcp.whenExhaustedAction">1</property>

<property name="dbcp.maxWait">60000</property>

<property name="dbcp.maxIdle">10</property>

<property name="dbcp.ps.maxActive">100</property>

<property name="dbcp.ps.whenExhaustedAction">1</property>

<property name="dbcp.ps.maxWait">60000</property>

<property name="dbcp.ps.maxIdle">10</property>

<!-- 對象與數據庫表格映像文件 -->

<mapping resource="com/amigo/pojo/User.hbm.xml"/>

<mapping resource="com/amigo/pojo/Org.hbm.xml"/>

</session-factory>

</hibernate-configuration>

5. MySql連接配置

在hibernate中。能夠配置非常多種數據庫,比如MySql、Sql Server和Oracle,MySql的配置舉比例如以下:

<?

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>

<!-- 各屬性的配置-->

<!—為true表示將Hibernate發送給數據庫的sql顯示出來 -->

<property name="show_sql">true</property>

<!-- SQL方言,這邊設定的是MySQL -->

<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>

<!-- 一次讀的數據庫記錄數 -->

<property name="jdbc.fetch_size">50</property>

<!-- 設定對數據庫進行批量刪除 -->

<property name="jdbc.batch_size">30</property>

<!--驅動程序-->

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>

<!-- JDBC URL -->

<property name="connection.url">jdbc:mysql://localhost/dbname?characterEncoding=gb2312</property>

<!-- 數據庫username-->

<property name="connection.username">root</property>

<!-- 數據庫password-->

<property name="connection.password">root</property>

<!—映射文件 -->

<mapping resource="com/amigo/pojo/User.hbm.xml"/>

<mapping resource="com/amigo/pojo/Org.hbm.xml"/>

</session-factory>

</hibernate-configuration>

上面使用的驅動類是com.mysql.jdbc.Driver。須要將MySql的連接器jar包(eg. mysql-connector-java-5.0.4-bin.jar)增加到classpath中。

6. Sql Server連接配置

本小節講述一下Sql Server數據庫的hibernate連接設置,在此僅僅給出連接部分的內容。其余部分與2.2.1.5一樣,在此不再贅述。內容例如以下:

<!--驅動程序-->

<property name="connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>

<!-- JDBC URL -->

<property name="connection.url">jdbc:jtds:sqlserver://localhost:1433;DatabaseName=dbname</property>

<!-- 數據庫username-->

<property name="connection.username">sa</property>

<!-- 數據庫password-->

<property name="connection.password"></property>

上例的驅動類使用的是jtds的驅動類,因此讀者須要將jtds的jar包(eg. jtds-1.2.jar)增加到classpath中。

7. Oracle連接配置

本小節講述一下Sql Server數據庫的hibernate連接設置。在此僅僅給出連接部分的內容,其余部分與2.2.1.5一樣。在此不再贅述。內容例如以下:

<!--驅動程序-->

<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>

<!-- JDBC URL -->

<property name="connection.url">jdbc:oracle:thin:@localhost:1521:dbname</property>

<!-- 數據庫username-->

<property name="connection.username">test</property>

<!-- 數據庫password-->

<property name="connection.password">test</property>

上例使用的驅動類為:oracle.jdbc.driver.OracleDriver,開發者須要將相關的jar包(ojdbc14.jar)增加到classpath中。

--------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xmlns:aop="http://www.springframework.org/schema/aop"
	   xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

   <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   	<property name="configLocations">
   		<value>classpath:hibernate.cfg.xml</value>
   	</property>
  </bean>
	
  <bean id="userDao" class="com.dao.impl.UserDaoImpl" >
  	<property name="sessionFactory" ref="sessionFactory"></property>
  </bean>
  
  <bean id="userService" class="com.service.UserService" >
  	<property name="userDao" ref="userDao"></property>
  </bean>
  
</beans>

<?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">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password">***</property>

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

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</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>
        <property name="format_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">update</property>

        <mapping resource="com/model/User.hbm.xml"/>
<!--        <mapping class="com.model.User"/>-->

    </session-factory>

</hibernate-configuration>

hibernate配置