Hibernate框架學習2
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