1. 程式人生 > >Hibernate框架學習2

Hibernate框架學習2

開始 修改 etc 批量查詢 不必要 service image png 成員

hibernate中的實體規則

實體類創建的註意事項:

  1.持久化類提供無參數構造

  2.成員變量私有,提供共有get/set方法訪問.需提供屬性

  3.持久化類中的屬性,應盡量使用包裝類型

  4.持久化類需要提供oid.與數據庫中的主鍵列對應

  5.不要用final修飾class 原因:hibernate使用cglib代理生成代理對象.代理對象是繼承被代理對象.如果被final修飾.將無法生成代理.

主鍵類型

自然主鍵(少見) 表的業務列中,有某業務列符合,必須有,並且不重復的特征時,該列可以作為主鍵使用.

代理主鍵(常見) 表的業務列中,沒有某業務列符合,必須有,並且不重復的特征時,創建一個沒有業務意義的列作為主鍵

主鍵生成策略

代理主鍵 identity : 主鍵自增.由數據庫來維護主鍵值.錄入時不需要指定主鍵.

  sequence: Oracle中的主鍵生成策略.

  increment(了解): 主鍵自增.由hibernate來維護.每次插入前會先查詢表中id最大值.+1作為新主鍵值.

  hilo(了解): 高低位算法.主鍵自增.由hibernate來維護.開發時不使用.

  native:hilo+sequence+identity 自動三選一策略.

  uuid: 產生隨機字符串作為主鍵. 主鍵類型必須為string 類型.

自然主鍵 assigned:自然主鍵生成策略. hibernate不會管理主鍵值.由開發人員自己錄入.

hibernate中的對象狀態

瞬時狀態 沒有id,沒有在session緩存中

持久化狀態 有id,在session緩存中

遊離|托管狀態 有id,沒有在session緩存中

hibernate進階-一級緩存

緩存:提高效率.hibernate中的一級緩存也是為了提高操作數據庫的效率.

提高效率手段1:提高查詢效率

技術分享圖片

提高效率手段2:減少不必要的修改語句發送

技術分享圖片

hibernate中的事務

事務並發問題 1.臟讀 2.不可重復度 3.幻|虛讀

事務的隔離級別

讀未提交- 123 讀已提交 - 23 可重復讀(mysql默認級別)-3 串行化 - 沒有問題

知識點:如何在hibernate中指定數據庫的隔離級別

技術分享圖片

知識點2:在項目中如何管理事務

1.業務開始之前打開事務,業務執行之後提交事務. 執行過程中出現異常.回滾事務.

2.在dao層操作數據庫需要用到session對象.在service控制事務也是使用session對象完成. 我們要確保dao層和service層使用的使用同一個session對象

3.在hibernate中,確保使用同一個session的問題,hibernate已經幫我們解決了. 我們開發人員只需要調用sf.getCurrentSession()方法即可獲得與當前線程綁定的session對象

4.註意1: 調用getCurrentSession方法必須配合主配置中的一段配置

技術分享圖片

註意2:通過getCurrentSession方法獲得的session對象.當事務提交時,session會自動關閉.不要手動調用close關閉.

hibernate中的批量查詢(概述)

HQL查詢-hibernate Query Language(多表查詢,但不復雜時使用)

Hibernate獨家查詢語言,屬於面向對象的查詢語言

基本查詢

技術分享圖片

技術分享圖片

條件查詢 ?號占位符

技術分享圖片

命名占位符

技術分享圖片

分頁查詢

技術分享圖片

Criteria查詢(單表條件查詢)

Hibernate自創的無語句面向對象查詢

基本查詢

技術分享圖片

條件查詢

技術分享圖片

技術分享圖片

分頁 查詢

技術分享圖片

設置查詢總記錄數

技術分享圖片

原生SQL查詢(復雜的業務查詢)

基本查詢

返回數組List

技術分享圖片

返回對象List

技術分享圖片

條件查詢

技術分享圖片

分頁查詢

技術分享圖片

Hibernate框架學習2