Hibernate筆記2,hibernate筆記

來源:互聯網
上載者:User

Hibernate筆記2,hibernate筆記

一.持久化類
1.持久化標識OID
     資料庫中叫做主鍵,對應實體的ID屬性即為OID;Hibernate通過OID區分兩個對象是否為同一對象;OID的產生一般交由程式自動處理;
2.持久化類
     概念:持久化類為可以操作資料庫的實體類;
         持久化類 = 實體類 + 對應檔(實體類名.hbm.xml)
3.編寫規則:
     (1).類需使用public修飾;
     (2).實現序列化介面;(public class User implements Serializable{....})
     (3).類不能使用final修飾,否則無法構造代理對象;
     (4).屬性需使用private修飾,並提供public修飾的getter/setter方法;
     (5).需添加OID屬性;
     (6).使用封裝類(Long,Double,Integer,Character...)修飾屬性
     (7).無參構造需使用public修飾,便於通過反射建立對象;
4.三種狀態:
     區分要點:(1)是否存在OID;(2)是否被session管理;
     i.瞬時態:無ID,無session;
     ii.持久態:有ID,有session;該狀態的對象在屬性發生變化時,自動更新資料庫,而不用調用update方法;
     iii.游離態(脫管態):有ID,無session;

二.主鍵(OID)建置原則
1.分類:
     自然主鍵:把具有業務含義的欄位作為主鍵;弊端是實際業務中該欄位有可能重複,一旦重複就要修改模型,重新定義主鍵,增加了維護資料庫的難度;
     代理主鍵:把不具備業務含義的欄位作為主鍵,一般取名為"ID",且一般為整型,節省資料庫空間;主鍵建置原則只對代理主鍵有效!!
2.建置原則:6種
     increment:自動成長,僅支援數字類型(不推薦使用);原理為先查詢資料庫表中最大ID值,然後再此基礎上加1.如果有使用者使用過該ID,後註冊使用者可以再次使用,導致資料重複問題;
     identity:自動成長,僅支援資料類型,原理為調用了資料庫的增長方式.使用該策略之前應確定所使用的資料庫支援自動成長,如mysql;
     sequence:原理是通過調用資料庫產生序列標識符,前提是確定資料庫支援序列,如oracle;
     native:根據資料庫對自動產生表示符的能力來選擇identity或sequence,最為常用;
     uuid:採用128位的UUID演算法來產生標識符,然後被編碼為32位的十六進位字串,由於字串佔用資料庫空間較整型較大,也不流行;
     assigned:手動指派(java程式指定);如果不在映射關係檔案中配置id元素的generator屬性,則預設使用該策略;
3.配置建置原則:在實體類包下的映射關係檔案(實體類.hbm.xml)中

  1     <class name="實體類全限定名" table="資料庫表名">  2         <id name="OID名" column="資料庫表欄位名">  3             <generator class="native"></generator>  4         </id>  5          ...............  6      </class>

三.緩衝機制
1.緩衝:
     記憶體中的一塊臨時地區,用來提高訪問效率,hibernate的緩衝機制主要用於提高查詢效率;
2.一級緩衝:
     (1)定義:session層級的緩衝(與session的生命週期一致),程式內建,不可卸載,由一系列的java集合(Map)構成;
     (2)存取資料的時機:
         i.調用save/update方法時,首先儲存到資料庫,再放入緩衝;
         ii.調用get方法時,先從緩衝尋找,沒有話再從資料庫中尋找,然後放入緩衝;
     (3)驗證一級緩衝的存在:兩次尋找同一對象,第一次查詢會發送sql語句,第二次沒有發送;
     (4)內部結構:
         存在緩衝區和快照區;快照區存放的是緩衝區資料的副本,程式員不可修改;程式員進行CRUD操作時其實是在操作緩衝區,在提交事務時,hibernate會比較兩塊地區資料的一致性,若不一致,則參照快取資料修改資料庫,並存入快照區一份.
3.二級緩衝:
     SessionFactory層級的緩衝;外掛程式形式,需要配置並匯入jar包,已被redis等取代;

四.交易管理
     1.概念:
         邏輯上的一組最小操作單元,特點是同時成功或失敗,目的是保證操作的完整性和安全性;
     2.特性:
         原子性:最小操作單元,不可分割;
         一致性:操作前後的資料保持一致;
         隔離性:多個線程之間的事務互不影響;
         持久性:事務提交後,儲存至資料庫,不可更改;
     3.不考慮隔離性的前提下,會出現的問題
         髒讀/不可重複讀取/虛讀
     4.解決以上問題:設定隔離等級
         read uncommited:不解決任何問題 1
         read commited:解決髒讀問題 2  oracle的預設隔離等級
         repeatable read:解決髒讀和不可重複讀取的問題 4 mysql的預設隔離等級
         serializable:都可以解決,但是變為單線程,效率低 8
     5.hibernate設定隔離等級
         在核心設定檔(hibernate.cfg.xml)中,添加以下語句:

  1         <hibernate-configuration>  2              <session-factory>  3                  <property name="hibernate.connection.isolation">4</property>  4                  ............  5              </session-factory>  6          </hibernate-configuration>

     6.事務控制在service層
         (1)在核心設定檔(hibernate.cfg.xml)中,添加以下語句:
  1         <hibernate-configuration>  2              <session-factory>  3                  <property name="hibernate.current_session_context_class">thread</property>  4                  ............  5              </session-factory>  6          </hibernate-configuration>

         (2)使用factory的getCurrentSession方法擷取session對象
         (3)使用與當前線程綁定的session對象的時候,不用手動關閉

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.