hibernate框架(三)持久化類&主鍵生成策略

一 持久化類的一個編寫規則

持久化:將內存中的一個對象持久化到數據庫中的過程
持久化類:一個Java對象與數據庫的表創建了映射關係,那麼這個類在hibernate中稱爲持久化類
能夠這麼理解:持久化類=Java類+映射文件mysql

持久化類的編寫規則
1 對持久化類提供一個無參的構造方法
2 屬性須要私有,對私有屬性提供get和set方法
3 對持久化類提供一個惟一標識Oid與數據庫中主鍵對應
4 持久化類中屬性儘可能使用包裝類類型
5 持久化類不要使用final進行修飾sql


 

二 主鍵生成策略

先介紹一下主鍵的分類:天然主鍵和代理主鍵
天然主鍵:主鍵的自己就是表中的一個字段(試題中的一個具體的屬性 身份證號)
代理主鍵:主鍵的自己不是表中必須的一個字段(不是實體中某個具體的屬性)
在實際開發中,儘可能使用代理主鍵
爲何不推薦使用天然主鍵,由於一旦天然主鍵參與到業務邏輯中,後期可能修改源代碼
好的程序設計知足OCP原則:對程序的擴展是open的。對修改源代碼是close的數據庫


 

主鍵生成策略(記住):
increment hibernate中提供的自動增加機制,單線程可使用,多線程不能夠
identity 使用的是數據庫底層的自動增加機制(適用於MySQL SQL server,可是Oracle不適合)
sequence 採用的是序列的方式(適用於Oracle,MySQL就不適用)】
uuid 適用於字符串類型的主鍵
native 本地策略 ,能夠在identity和sequence之間進行自動轉換
assigned hibernate放棄外鍵的管理編程

結合不一樣的狀況去使用
編程中遇到的問題
沒有寫自動生成語句的配置 ,致使hibernate不能爲你建立表緩存

<property name="hibernate.hbm2ddl.auto">update</property>

三 持久化類的三種狀態

hibernate是持久層框架,經過持久化類完成ORM操做。Hibernate爲了更好的管理持久化類
將其分爲三種:瞬時態、持久態、託管態
瞬時態:這種對象沒有惟一的標識OID,沒有被session管理
持久態:這種對象有惟一標識OID,被session管理
託管態:這種對象有惟一標識OID,沒有被session管理
下面代碼演示:這段程序包含了持久化的三種狀態session

public class TestDemo2 { @Test public void demo1(){ Session session = HibernateUtils.openSession(); Transaction beginTransaction = session.beginTransaction(); Customer customer=new Customer(); customer.setCust_name("王六");//瞬時態對象。沒有惟一標識的OID,沒有session管理 
 Serializable id = session.save(customer);//持久態對象。有了惟一標識的OID,調用了session
 beginTransaction.commit(); session.close(); System.out.println(customer.getCust_name());//託管態對象。有惟一標識的OID,session被銷燬了
 } }

 


咱們重點研究的是持久態對象,
持久化類的持久態對象,能夠自動更新數據庫。多線程

@Test //持久態對象自動更新數據庫
    public void demo2(){ Session session = HibernateUtils.openSession(); Transaction beginTransaction = session.beginTransaction(); //得到持久態對象
        Customer customer = session.get(Customer.class, 1l); customer.setCust_name("小紅"); beginTransaction.commit(); session.close(); }

咱們能夠看出並手動調用update方法,Hibernate就能夠自動更新數據庫了,持久態之因此有這樣的功能主要依賴於他的一級緩存oracle

4、Hibernate的一級緩存

什麼是緩存:是一種優化的方式,將數據存放到內存中,使用的時候直接從緩存中去取
優化手段:緩存、抓取策略
一級緩存稱爲是session級別的緩存,生命週期和session一致。框架

5、Hibernate的事務控制


事務:指的是邏輯上的一組操做,組成這組操做的邏輯單元要麼所有成功,要麼所有失敗
事務的四個特性:原子性、一致性、隔離性、持久性ide

  • Read Uncommitted(1級)
  • Read committed(2級)
  • Repeatable read(4級)
  • Serializable 序列化(8級)

實際開發中,不會選擇最高或者最低隔離級別,選擇Read committed(oracle默認),Repeatable read(mysql默認)。

 


 

Hibernate解決service的事務管理

1.在工具類中更改getCurrentSession方法

public static Session getCurrentSession(){ return sessionFactory.getCurrentSession(); }

2.在覈心配置文件中進行以下配置

  <!-- 配置session綁定當前線程 -->
   <property name="hibernate.current_session_context_class">thread</property>

6、Hibernate中其餘的API

1.Query

     //條件查詢
        String hql="from Customer where cust_name like ?"; Query createQuery = session.createQuery(hql); createQuery.setParameter(0, "王%");
     //分頁查詢
        String hql="from Customer"; Query createQuery = session.createQuery(hql); createQuery.setFirstResult(0); createQuery.setMaxResults(2);

2.Criteria

//分頁查詢
        Criteria criteria = session.createCriteria(Customer.class); criteria.setFirstResult(3); criteria.setMaxResults(2);

Criteria更加的面向對象。

相關文章
相關標籤/搜索