hibernate入門乾貨

weixin_45929015發表於2020-11-30

@hibernate入門乾貨

一.Hibernate基礎知識

純乾貨,沒有任何新增素

1.什麼是Hibernate?

Hibernate是一個開放原始碼的物件關係對映框架,它對 JDBC進行了非常輕量 級的物件封裝,它將POJO類與資料庫表建立對映關係,是一個全自動的ORM 框架,hibernate可以自動生成SQL語句,自動執行。Hibernate可以應用在任 何使用 JDBC的場合,既可以在Java的客戶端程式使用,也可以在Servlet/JSP 的Web應用中使用。

2.什麼是持久化?

狹義的理解:“持久化”僅僅指把域物件永久儲存到資料庫中; 廣義的理解,“持久化”包括和資料庫相關的各種操作。
● 儲存:把域物件永久儲存到資料庫。
● 更新:更新資料庫中域物件的狀態。
● 刪除:從資料庫中刪除一個域物件。
● 載入:根據特定的OID(物件ID),把一個域物件從資料庫載入到記憶體。
● 查詢:根據特定的查詢條件,把符合查詢條件的一個或多個域物件從資料庫加 載內在存中。

3.為什麼要持久化?

持久化技術封裝了資料訪問細節,為大部分業務邏輯提供物件導向的API。
● 通過持久化技術可以減少訪問資料庫資料次數,增加應用程式執行速度;
● 程式碼重用性高,能夠完成大部分資料庫操作;
● 鬆散耦合,使持久化不依賴於底層資料庫和上層業務邏輯實現,更換資料庫時 只需修改配置檔案而不用修改程式碼。

4.Java中的ORM框架有哪些?

ORM(object relation mapping)框架的作用是將java物件和資料庫的物件 (表、檢視)之間建立起對映關係。 結果:在java後臺操作java物件就相當於運算元據庫的表了。 常見的Java中的ORM框架有: Hibernate\MyBatis\JPA

5.Hibernate中的資料物件操縱語言HQL、SQL、HQL、PL/SQL、JDBC區別

hql:操作的是物件和屬性; sql:操作的是表和欄位,屬於物件導向的查詢語言。 HQL是Hibernate Query Language的縮寫,格式如下:
[select/update/delete……]
from Entity [where……]
[group by……] [having……]
[order by……]
1 hql : FROM user where id=‘1’;
2 sql : FROM TB_USER where id= ‘1’

6.Hibernate阻抗不匹配問題

為了解決資料庫和Java之間的阻抗不匹配問題,hibernate可以配置完成有資料庫 型別到Java物件型別的轉換。 java基礎類、Java包裝類的差別(略)
MySQL資料庫型別 <=> Java物件型別(建議使用Java包裝類)
int <
=> Integer long <=> Long
float\decimal\number\numberic<
=> Float
float <=> Float
double <
=> Double
char\varchar <=> String
tiny blob\medium blob\long blob<
=> byte[]
boolean <=> Boolean
date\time\timestamp <
=> date\time

二、Hibernate工作原理

1.通過 Configuration().configure(); 讀取並解析 hibernate.cfg.xml 配 置檔案。
2.由hibernate.cfg.xml中的 <mappingresource=“xx/xx/xxx.hbm.xml”/> 讀取解析對映資訊。
3.通過 config.buildSessionFactory(); 得到 sessionFactory。 4.sessionFactory.openSession();得到 session。 5.session.beginTransaction(); 開啟事務。 6.session.getTransaction().commit(); 提交事務
7.關閉 session.close;

三、Hibernate持久化類與 主鍵生成策略

在 hbm.xml 中可以設定的主鍵生成策略如下:
1.increment: 代理主鍵。由 hibernate 維護一個變數,每次生成主鍵時自 動以遞增。 問題:如果有多個應用訪問一個資料庫,由於每個應用維護自己 的 主鍵。此時主鍵可能衝突。建議不採用。
2.identity:代理主鍵。由底層資料庫生成維護。條件是資料庫支援自動增長 資料型別。 比如:mysql 的自增主鍵,oracle 不支援主鍵自動生成。如果資料 庫支援自增建議採用。註解方式時可以採用這個代替native。
3.sequence:代理主鍵。Hibernate 根據底層資料庫序列生成識別符號。條件 是資料庫支援序 列。比如 oracle 的序列。如果資料庫支援序列建議採用。 4.native :代理主鍵。根據底層資料庫對自動來選擇 identity、 sequence、hilo:生成主鍵策略的控制權由 hibernate 控制。注意在 hibernate教程中採用此選項。
5.uuid:代理主鍵。Hibernate 採用 128 位的 UUID 演算法來生成識別符號。該 演算法能夠在網路環境中生成唯一的字串識別符號。此策略可以保證生成主鍵的唯 一性,並且提供了最好的資料庫插入效能和資料庫平臺的無關性。建議採用。
6.assigned:自然主鍵。由 java 程式負責生成識別符號。不建議採用。

四、Hibernate事務管理

1.事務特性 (ACID) 事務具有ACID屬性
(1)原子性(Atomic):事務由一個或多個行為綁在一起組成,好像是一個單獨 的工作單元。原子性確保在事務中的所有操作要麼都發生,要麼都不發
(2)一致性(Consistent):一旦一個事務結束了(不管成功與否),系統所處的狀 態和它的業務規則是一致的。即資料應當不會被破壞。
(3)隔離性(Isolated):事務應該允許多個使用者操作同一個資料,一個使用者的 操作不會和其他使用者的操作相混淆。
(4)永續性(Durable):一旦事務完成,事務的結果應該持久化。 事務的ACID特性是由關聯式資料庫管理系統(RDBMS)來實現的。
2.事務的併發問題: 第一類丟失更新:撤消一個事務時,把其它事務已提交的更新的資料 覆蓋了。髒讀:一個事務讀到另一個事務未提交的更新資料。 幻讀:一個事務執行兩次查詢,但第二次查詢比第一次查詢多出了一 些資料行。 不可重複讀:一個事務兩次讀同一行資料,可是這兩次讀到的資料不 一樣。
3.事務的隔離級別: 隔離性是通過資料庫的表或欄位加鎖實現的。事務隔離級別分為以下四種:
(1) Read Uncommitted 讀未提交
一個事務可以讀取另一個事務已更新但未提交的資料,但另一事務提交前 不允許寫入。
(2) Read committed 讀提交(SQL Server、oracle預設事務) 一個事務僅可以讀取另一個事務已提交的更新資料。
(3) Repeatable read 重複讀 一個事務已讀取的資料不允許其他事務的寫入。
(4)Serializable 序列化 所以事務序列化進行,不能併發執行。
4.hibernate中設定事務的隔離級別:
1.讀未提交
2.讀已提交
3.可重複讀
4.序列化

相關文章