hibernate入門乾貨
@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.序列化
相關文章
- hibernate快速入門示例
- Python乾貨整理,從入門說起(7.4)Python
- 純乾貨分享 —— 大資料入門指南大資料
- Java乾貨整理,從入門說起(7.11)Java
- Hibernate快速入門筆記筆記
- Hibernate的入門知識
- Spring Cloud 純乾貨,從入門到實戰SpringCloud
- 史上最全遊戲策劃入門乾貨(一)遊戲
- 史上最全遊戲策劃入門乾貨(三)遊戲
- 史上最全遊戲策劃入門乾貨(二)遊戲
- 史上最全遊戲策劃入門乾貨(四)遊戲
- 3.Hibernate入門筆記筆記
- 【乾貨】機器學習和深度學習概念入門機器學習深度學習
- 一文快速入門體驗 Hibernate
- Hibernate入門這一篇就夠了
- 乾貨 | 目標檢測入門,看這篇就夠了(下)
- 乾貨 | 目標檢測入門,看這篇就夠了(上)
- 好程式設計師分享自學大資料入門乾貨程式設計師大資料
- AI客服上線 乾貨 乾貨 全是乾貨!AI
- LittleVGL (LVGL)乾貨入門教程二之LVGL的輸入裝置(indev)API對接。devAPI
- 前端乾貨系列—-入門webpack這一篇文章就夠了前端Web
- 前端乾貨系列----入門webpack這一篇文章就夠了前端Web
- 【乾貨乾貨】configtxlator 工具介紹
- Hibernate基於Maven入門例項,與MyBatis比對MavenMyBatis
- 乾貨!這裡有一份神經網路入門指導,請收下!神經網路
- 博文乾貨|5張圖帶你快速入門 Pulsar 的儲存引擎 BookKeeper儲存引擎
- 自媒體新手入門攻略,學習乾貨內容瞭解運營技巧
- Hibernate 之 懶載入
- Lua乾貨
- 乾貨|手把手教導!3分鐘讓你快速入門地圖視覺化地圖視覺化
- 純乾貨——那些超級熱門的自媒體工具
- 前端乾貨 -02前端
- Spring Security 實戰乾貨:玩轉自定義登入Spring
- Hibernate 懶載入 Unable to evaluate the expression Method threw ‘org.hibernate.LazyInitializationExceptExpress
- mybatis入門程式:刪除、更新使用者&&hibernate和mybatis的區別MyBatis
- 自媒體新手怎麼入門?這些乾貨告訴你新手如何玩轉自媒體
- [乾貨分享]1000篇乾貨好文!量子技術——進階篇
- [乾貨分享]1000篇乾貨好文!量子技術——資訊篇