天天看點

資料庫學習--Hibernate方言(是什麼 為什麼 怎麼辦)

知識儲備

HQL和SQL。

是什麼

HQL : Hibernate Query Language,Hibernate查詢語言 。

SQL : Structured Query Language,結構化查詢語言。

面向對象

HQL : 面向對象查詢(根本差別) 。

SQL : 面向資料庫表查詢。

使用方法

HQL :

from 後面跟的類名 + 類對象 where + 符合條件的對象的屬性;      

例如:

from User user where user age=20;      

SQL :

from 後面跟的表名 + where + 符合條件的字段;      

例如:

SELECT * FROM testtable WHERE age > 20;      

将HQL轉換成SQL

為什麼

通常我們在做項目時,都是”某某架構+hibernate/JPA/JDBC+某某資料庫”的形式,如果業務要求我們,要使項目能夠适配多種資料庫,也就是變成了”某某架構+hibernate/JPA/JDBC+某1資料庫,某2資料庫,某3資料庫”。(比如:SpringMVC+ Hibernate + MySQL,Oracle)那麼,現在就需要我們把HQL語句轉換成不同的SQL語句了。那麼,方言就來了。

Hibernate方言

為什麼

在Hibernate底層依然使用SQL語句來執行資料庫操作,雖然所有關系型資料庫都支援使用标準SQL語句,但所有資料庫都對标準SQL進行了一些擴充,是以在文法細節上存在一些差異,是以Hibernate需要根據資料庫來識别這些差異。假如系統需要資料庫的變換時,那麼用hibernate的話就隻需要改一改配置檔案(修改連接配接字元串、驅動類、方言等),而用傳統的jdbc時,那麼sql語言可能就要有很多改動。(略微重複了)

是什麼

為實作HQL語句向不同資料庫的SQL語句轉換時,解決不同資料庫之間的差異而制定的一套”規範”。

舉例來說,我們在MySQL資料庫裡進行分頁查詢,隻需使用limit關鍵字就可以了;而标準SQL并不支援limit關鍵字,例如Oracle則需要使用行内視圖的方式來進行分頁。同樣的應用程式,當我們在不同資料庫之間遷移時,底層資料庫的通路細節會發生改變,而Hibernate也為這種改變做好了準備,現在我們需要做的是:告訴Hibernate應用程式的底層即将使用哪種資料庫——這就是Hibernate方言。