《Java入門從笨鳥到菜鳥》讀後感(五)

《Java入門從笨鳥到菜鳥》讀後感(五)

Hibernate知識

一、基本概念和體系結構

1、簡介
(1)開放源代碼的對象關係映射框架,對JDBC進行了輕量級的對象封裝
(2)持久化是將程序數據在持久狀態和瞬時狀態間轉換的一種機制,持久化的主要應用是將內存中的對象存儲在關係型的數據庫中,瞬時狀態transient、持久狀態persisten

2、對象關係映射
(1)object/relational 將關係型數據庫和業務實體對象之間做一個映射

二、基本詳解

1、流程
(1)創建Hibernate的配置文件
(2)創建持久化類
(3)創建對象-關係映射文件
(4)通過Hibernate API編寫訪問數據庫的代碼

2、持久化類
(1)Hibernate要求持久化類必須提供一個不帶參數的默認構造方法
(2)一個SessionFactory實例對應一個數據存儲源,應從SessionFactory中獲得Session實例

3、SessionFactory
(1)線程安全,意味着同一個實例可以被應用的多個線程共享
(2)重量級,不能隨意創建或銷燬實例,單個數據庫對應單個SessionFactory

4、Session接口
(1)持久化管理器,提供了和持久化相關的操作,如添加、更新、刪除、加載和查詢對象
(2)輕量級,創建和銷燬不需要消耗太多資源
(3)操作數據庫的各種方法

save():把Java對象保存數據庫中
update():更新數據庫中的Java對象
delete():把Java對象從數據庫中刪除
get():從數據庫中加載Java對象

5、配置文件
(1)<property>元素映射值 類型屬性

name屬性:指定持久化類的屬性的名字
type屬性:指定Hibernate或Java映射類型
column屬性:指定與類的屬性映射的表的字段名

(2)Java類型、Hibernate映射類型以及SQL類型之間的對應關係
在這裏插入圖片描述

三、常用API

1、使用Hibernate操作數據庫需要的七個步驟
(1)讀取並解析配置文件 Configuration conf=new Configuration().configure()
(2)讀取並解析映射信息,創建SessionFactory:SessionFactory sf=conf.buildSessionFactory()
(3)打開Session:Session session=sf.openSession()
(4)開始一個事務(增刪改操作必須,查詢操作可選):Transaction tx=session.beginTransaction()
(5)數據庫操作: session.save(user);
(6)提交事務(回滾事務): tx.commit()/ tx.rollback()
(7)關閉session:session.close()

2、Configuration
(1)負責Hibernate的配置信息,從hibernate.cfg.xml或Hibernate.properties讀取,默認加載hibernate.cfg.xml
(2)三個方法

public Configuration configure(String resource)
public Configuration configure(URL url)
public Configuration configure(File configFile)

3、SessionFactory
(1)Configuration的實例會根據當前的配置信息,構造SessionFactory實例
(2)線程安全,一般一個應用中一個數據庫共享一個SessionFactory實例
(3)Session實例不是線程安全的

4、Session
(1)非線程安全的
(2)創建:SessionFactory.openSession()
(3)創建Session實例後,不論是否執行事務,最後都需要關閉Session實例,釋放Session實例佔用的資源
(4)getCurrentSession與openSession區別

getCurrentSession創建的Session會和綁定到當前線程,而openSession不會
getCurrentSession創建的線程會在事務回滾或事務提交後自動關閉,而openSession必須手動關閉
getCurrentSession使用當前的session,openSession重新建立一個新的session

5、事務transaction
(1)Hibernate本身不具備事務處理功能
(2)Hibernate的Transaction實際上是底層的JDBC Transaction的封裝

四、一對多關係映射

1、關聯映射
(1)將關聯關係映射到數據庫,關聯關係是對象模型在內存中的一個或多個引用
(2)關聯分類

單向關聯和雙向關聯
關聯的數量,根據擁有被關聯對象的個數確定

(3)維護
多對一的1的一方不需要維護關係,多的一方需要維護雙方關係,內有一的一方引用

五、繼承關係映射

六、session緩存機制和三種對象狀態

1、session使用流程
(1)調用save保存對象時,對象加載到session緩存中,返回值是一個seriaseble接口類型的數據
(2)作用

減少訪問數據庫的頻率,從內存中讀取持久化對象的速度快
保證緩存中的對象與數據庫中的相關記錄保持同步,不會立刻執行相關的SQL語句

(3)清理緩存

當應用程序調用org.hibernate.Transaction的commit方法時,先清理緩存,然後再向數據庫提交事務
當應用程序顯式調用Session的flush方法時,完成事務採纔去清理緩存

2、Hibernate中Java對象的三種狀態
(1)臨時狀態transient
(2)持久化狀態persistent
(3)遊離狀態detached

3、Session的二級緩存
(1)由SessionFactory管理
(2)第二級緩存是進程範圍的緩存,存放的是對象的散裝數據

4、Hibernate三種檢索方式
(1)立即檢索策略:頻繁訪問數據庫,影響檢索性能
(2)延遲檢索策略
(3)左外連接檢索策略

5、HQL和QBC查詢方式
(1)HQL檢索方式:Hibernate提供了Query接口,是Hibernate提供的專門的HQL查詢接口,能夠執行各種複雜的HQL查詢語句
(2)QBC檢索方式:使用QBC(Query By Criteria)API來檢索對象,封裝了基於字符串形式的查詢語句
(3)HQL功能

在查詢語句中設定各種查詢條件
支持投影查詢,即僅檢索出對象的部分屬性
支持分頁查詢
支持連接查詢
支持分組查詢,允許使用having和group by關鍵字
提供內置聚集函數,如sum()、min()和max()
支持子查詢,即嵌入式查詢
支持動態綁定參數

(4)Query
Session的createQuery方法創建一個Query對象,包含一個HQL查詢語句

6、QBC檢索
(1)主要由Criteria接口、Criterion接口和Expression類組成,支持在運行時動態生成查詢語句
(2)檢索步驟

調用Session的createCriteria()方法創建一個Criteria對象
設定查詢條件,Expression類提供一系列用於設定查詢條件的靜態方法,靜態方法都返回Criterion實例,每個Criterion實例代表一個查詢條件
調用Criteria的list方法查詢語句,返回List類型的查詢條件

(3)Expression類
org.hibernate.criterion.Restrictions的子類

7、分頁顯示查詢
(1)setFirstResult(int firstResult)
(2)setMaxResult(int maxResults)

七、數據庫事務與隔離級別

1、事務生命週期
(1)事務的開始邊界:begin
(2)提交事務:commit
(3)撤銷事務:rollback

2、hibernate事務邊界
(1)聲明事務的開始邊界:Transaction tx = session.beginTransaction()
(2)提交事務:tx.commit()
(3)撤銷事務:tx.rollback()

3、hibernate多事務併發問題
(1)第一類丟失更新:撤銷一個事務時,其他事務已提交的更新數據覆蓋
(2)髒讀:一個事務讀到另一個事務未提交的更新數據
(3)虛讀:一個事務讀到另一個事務已提交的新插入的數據
(4)不可重複讀:一個事務讀到另一事務已提交的更新數據
(5)第二類丟失更新:一個事務覆蓋另一事務已提交的更新數據

八、國際化

1、JDK對國際化的支持
(1)Local類:表示特定的地理、政治和文化地區
(2)ResourceBundle:資源包包含特定於語言環境的對象,翻譯成不同的語言
(3)MessageFormat:提供了以與語言無關方式生成連接消息的方式

2、Struts2需要國際化的部分
(1)類型轉換
(2)數據校驗
(3)驗證框架xml配置文件的國際化
(4)JSP頁面的國際化
(5)Action的國際化
(6)加載全局資源文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章