hibernate持久化類和一級緩存
阿新 • • 發佈:2018-10-05
包括 ide 讀取 持久化類 沒有 imp mysql- final enc
持久化類編寫規則
1.有無參構造函數。
2.屬性不能被final修飾。
3.對外提供屬性的get和set方法。
4.需要提供一個持久化OID對象唯一標識對象。
主鍵生成策略
<!-- <generator class="native"/>包括sequence和 identity--> <!-- <generator class="increment"/>適用於單線程使用,采用hibernate主鍵生成策略,最大id加1成為新的id--> <!--<generator class="identity"/>使用數據庫底層主鍵生成策略,id自動增長,適用於mysql--> <!--<generator class="sequence"/> 適用於oracle --> <!--<generator class="uuid"/> 適用於使用字符串當主鍵 --> <!--<generator class="assigned"/> 用戶自定義主鍵生成策略 ,手動生成id-->
持久化類三種狀態
1.瞬時態,沒有OID標識,沒有被Session管理。
2.持久態,有OID持久化標識,被Session管理。
3.托管態,有OID持久化標識,沒有被Session管理。
hibernate的一級緩存
hibernate的一級緩存是session級別的緩存,隨著session的創建而產生,隨著session的清除而消失,一級緩存的作用是從內存中讀取數據,而不需要從硬盤中讀取數據,如果一個對象的標識在緩存中存在,下次獲取數據從緩存中獲取,插入數據如果對象已經存在,則不發送sql語句,如果不存在,需要發送sql語句。這是利用一級緩存的快照區實現的。
package hibernate; import java.io.Serializable;import org.hibernate.Session; import org.hibernate.Transaction; public class hibernateDemo3 { public static void main(String[] args) { Session session = hibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); Customer customer1 = (Customer) session.get(Customer.class, 1l); customer1.setCust_name("666"); System.out.println(customer1); transaction.commit(); session.close(); } }
在第一次修改的時候,是發送了update語句,第二次執行的話快照區已經存在這個對象數據,就不會發送update語句。
hibernate持久化類和一級緩存