Hibernate之設定檔
可持久化對象有以下三種狀態:
臨時狀態(Transient):對象在儲存進資料庫之前為臨時狀態,這時資料庫中沒有該對象的資訊,如果沒有持久化,程式退出後臨時狀態的對象資訊將會丟失。隨時可能被記憶體回收行程回收(在資料庫中沒有於之對應的記錄,應為是new初始化),而執行save()方法後,就變為Persistent對象(持久性對象),沒有納入session的管理,記憶體中一個對象,沒有ID,緩衝中也沒有
持久化狀態(Persistent):對象在儲存進資料庫後或者從資料庫載入後、並且沒有脫離Session時為持久化狀態,這時候資料庫中有該對象的資訊。由於還在Session中,持久化狀態的對象可以執行任何有關資料庫的操作,在資料庫有存在的對應的記錄,納入session管理。在清理緩衝(髒資料檢查)的時候,會和資料庫同步。記憶體中有、緩衝中有、資料庫有(ID)
分離狀態(Detached):分離狀態是對象曾經出於持久化狀態,但是現在已經離開Session了。雖然分離狀態的對象有id值,但是已經無法執行有關資料庫的操作了。例如,讀取消極式載入的集合屬性,可能會拋出LazyInitalizeException。
Hibernate整體理解
Hibernate的映射機制
Hibernate事務隔離機制(樂觀鎖-悲觀鎖)
設定檔
Hibernate同時支援動態配置
XML配置
Configurationcfg = new Configuration().addResource(“com/clf/Cat.hbm.xml”);
//註解配置
Configuration cfg= new Configuration().addClass(com.clf.bean.cat.Class);
通過setProperty(“hibernate.dialect”,”org.hibernate.dialect.MySQLDialect”)類似的方法可以動態地設定Hibernate參數,還可以用addProperties(Propertiesp)批量的添加參數
常規配置
Hibernate的設定檔可以為XML或者properties檔案,預設的設定檔名稱為hibernate.cfg.xml或者hibernate.properties,位於classpath下面。properties檔案中的參數是具有hibernate首碼的,而xml檔案沒有
hibernate.connection.driver_class= com.mysql.jdbc.Driver
hibernate.connection.url= jdbc:mysql://localhost:3306/hibernate?characterEncoding=UTF-8
hibernate.connection.username= root
hibernate.connection.password= admin
hibernate.dialect= org.hibernate.dialect.MySQLDialect
hibernate.show_sql= true
hibernate.hbm2ddl.auto= create
hibernate.current_session_context_class= thread
<?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>
<!-- 資料庫使用者名稱-->
<property name="connection.username">root</property>
<!– 資料庫密碼–>
<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>
配置資料來源
<session-factory>
<!--下面為JNDI的配置 -->
<!-- 資料來源的名稱 -->
<property name="connection.datasource">java:comp/env/jdbc/datasourcename</property>
<!-- 資料來源的提供者 -->
<property name="hibernate.jndi.url"></property>
<!-- 資料來源的實作類別 -->
<property name="hibernate.jndi.class"></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>
c3p0串連池
c3p0串連池是Hibernate推薦使用的串連池,若需要使用該串連池時,需要將c3p0的jar包加入到classpath中。c3p0串連池的配置樣本如下:
<session-factory>
<property name="connection.driver_class">……</property>
<!-- JDBC URL -->
<property name="connection.url">……</property>
<!-- 資料庫使用者名稱 -->
<property name="connection.username">user</property>
<!-- 資料庫密碼 -->
<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>
……
</session-factory>
在上述配置中,Hibernate根據設定檔產生串連,再交給c3p0管理。
更多詳情見請繼續閱讀下一頁的精彩內容: