hibernate配置
<!--標準的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配置