1. 程式人生 > >hibernate 5.2.6新特性

hibernate 5.2.6新特性

概述

Hibernate ORM 5.2.6 釋出了,Hibernate是一種Java語言下的物件關係對映解決方案。 它是使用GNU寬通用公共許可證發行的自由、開源的軟體。它為面向物件的領域模型到傳統的關係型資料庫的對映,提供了一個使用方便的框架。
Hibernate ORM 5.2.6 釋出不到一個月,網上關於Hibernate ORM 5.2.6 的資料甚少,這裡我們只能藉助官網的介紹來做一個簡單的介紹Hibernate ORM Guide
Hibernate領域模型:
這裡寫圖片描述
作為JPA提供者,Hibernate實現了Java Persistence API規範,並且JPA介面和Hibernate特定實現之間的關聯,關係如下:

這裡寫圖片描述
我們知道,JPA 是通過 JDK5.0 註解或 XML 描述物件 - 關係表的對映關係,並將執行期實體物件持久化到資料庫中去。JPA 規範的制定過程中大量參考了 Hibernate 的內容,所以如果一個對 Hibernate 很熟悉的人,使用起來 JPA 會是輕車熟路,駕輕就熟的,並且會感覺到更簡單一些,這主要得益於 JDK5 中引入的註解(annotation)。

SessionFactory

SessionFactory介面負責初始化Hibernate。它充當資料儲存源的代理,並負責建立Session物件。往往一個專案只需要一個SessionFactory,當需要操作多個數據庫時,可以為每個資料庫指定一個SessionFactory。
注:SessionFactory很早就存在了,想2011年做第一個專案的時候,用大名鼎鼎的ssh框架時候就有了,具體什麼版本大家可以自己查詢下。

Session

一提起Session,首先想到的是http的session會話,而hibernate中的Session呢,是用來表示,應用程式和資料庫的一次會話。我們知道Session的會話是執行緒不安全的,所以,通常將每個Session例項和一個數據庫事務繫結,也就是每執行一個數據庫事務,都應該先建立一個新的Session例項,在使用Session後,還需要關閉Session。

Transaction

Transanction介面是Hibernate的資料庫事務介面,用於管理事務,他對底層的事務作出了封裝,使用者可以使用Transanction物件定義自己的對資料庫的原子操作,底層事務包括:JDBC API ,JTA(Java Transaction API)…一個Transaction物件事務可能會包括多個對資料庫進行的操作。使用事務也是為了緩解對資料庫的壓力。

領域模型

領域建模源自於資料建模,hibernate的領域模型,其實就是所謂的持久化模型。要完成領域建模,需要遵從一些規則。

  • 將業務關注點和橫切關注點(事務、日誌、安全)進行分離,你的領域模型中不應該包含有與橫切關注點相關的程式碼。
  • 不要與特定的API進行耦合,因為要保證你的領域模型具有足夠高的重用性和靈活性,那麼就不要跟一些特定的API耦合。

現在有一種比較流行的領域模型——POJO類,這些POJO類只包含了基本的業務資料和對應的存取方法,這樣的POJO類就非常符合上述的兩種規則。

建立領域模型

領域模型的建模,其實跟E-R圖是非常相近的,也是從業務規則中抽取出跟業務相關的實體,理清實體跟實體之間的聯絡。舉一個線上拍賣系統來說,使用者拿商品進行拍賣,然後其他使用者可以出價,從這裡可以抽取出三個實體:使用者User、商品Item和出價Bid。

透明和自動持久化

透明指的是,你可以在不知道底層是怎麼實現持久化的情況下,底層幫助你進行領域模型的持久化。所謂的自動持久化,就是不需要人為地編寫一些SQL語句和呼叫JDBC的API來完成持久化工作。Hibernate在進行領域模型持久化時就是透明的和自動化的。它根據ORM的對映規則,來自動生成SQL語句並執行。

領域模型的關聯

關聯有一對一、一對多、多對多關聯,在面向物件的Java中,這三種關聯都可以很好地表示,一對一關聯就是單一類的實體,而一對多多對多關聯,包含了多的一方要使用集合,一般情況下,都會選擇使用Set集合。

關聯在面向物件的Java中,還存在方向,即所謂的單向和雙向。選擇單向還是雙向,根據我們的資料導航計劃來選用,比如說一個User有一個UserDetail(說明使用者詳細資訊的實體類),正常情況下,可以由User導航到UserDetail(通過getter方法),一般不需要從UserDetail導航到User,所以此時選擇單向的資料導航計劃就可以了。

Bootstrap

Bootstrap是一個來自 Twitter,是目前最受歡迎的前端框架。Bootstrap 是基於 HTML、CSS、JAVASCRIPT 的,它簡潔靈活,使得 Web 開發更加快捷。在專案中往往結合其他框架來完成專案的開發。

JPA

JPA全稱Java Persistence API.JPA通過JDK 5.0註解或XML描述物件-關係表的對映關係,並將執行期的實體物件持久化到資料庫中。
JPA由EJB 3.0軟體專家組開發,作為JSR-220實現的一部分。但它又不限於EJB 3.0,你可以在Web應用、甚至桌面應用中使用。JPA的宗旨是為POJO提供持久化標準規範,由此可見,經過這幾年的實踐探索,能夠脫離容器獨立執行,方便開發和測試的理念已經深入人心了。Hibernate3.2+、TopLink 10.1.3以及OpenJPA都提供了JPA的實現。
JPA的總體思想和現有Hibernate、TopLink、JDO等ORM框架大體一致。總的來說,JPA包括以下3方面的技術:

  • ORM對映元資料

JPA支援XML和JDK5.0註解兩種元資料的形式,元資料描述物件和表之間的對映關係,框架據此將實體物件持久化到資料庫表中;

  • API

用來操作實體物件,執行CRUD操作,框架在後臺替我們完成所有的事情,開發者從繁瑣的JDBC和SQL程式碼中解脫出來。

  • 查詢語言

這是持久化操作中很重要的一個方面,通過面向物件而非面向資料庫的查詢語言查詢資料,避免程式的SQL語句緊密耦合。