1. 程式人生 > >hibernate持久化類和一級緩存

hibernate持久化類和一級緩存

包括 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持久化類和一級緩存