Hibernate核心思想與接口簡(jiǎn)介
hibernate是一個(gè)采用ORM機(jī)制持久層的開源框架,接下來我們聊聊它的核心思想和接口。
核心思想:ORM是將表與表之間的操作,映射成對(duì)象和對(duì)象之間的操作,這樣簡(jiǎn)化了持久層的代碼,減輕了程序員的負(fù)擔(dān)
ORM是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的現(xiàn)象的技術(shù)。簡(jiǎn)單的說,ORM是通過使用描述對(duì)象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將java程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫中。本質(zhì)上就是將數(shù)據(jù)從一種形式轉(zhuǎn)換到另外一種形式。
所有的Hibernate應(yīng)用中都會(huì)訪問Hibernate的5個(gè)核心接口。
Configuration接口:配置Hibernate,根啟動(dòng)Hibernate,創(chuàng)建SessionFactory對(duì)象。
SessionFactory接口:初始化Hibernate,充當(dāng)數(shù)據(jù)存儲(chǔ)源的代理,創(chuàng)建Session對(duì)象。
Session接口:負(fù)責(zé)保存、更新、刪除、加載和查詢對(duì)象。
Transaction接口:管理事務(wù)。
Query和Criteria接口:執(zhí)行數(shù)據(jù)庫查詢。
1.Configuration接口
Configuration對(duì)象用于配置并且啟動(dòng)Hibernate。Hibernate應(yīng)用通過Configuration實(shí)例來指定對(duì)象-關(guān)系映射文件的位置或者動(dòng)態(tài)配置Hibernate的屬性,然后創(chuàng)建SessionFactory實(shí)例。
2.SessionFactory接口
一個(gè)SessionFactory實(shí)例對(duì)應(yīng)一個(gè)數(shù)據(jù)存儲(chǔ)源,應(yīng)用從SessionFactory中獲得Session實(shí)例。SessionFactory有以下特點(diǎn):
它是線程安全的,這意味著它的同一個(gè)實(shí)例可以被應(yīng)用的多個(gè)線程共享。
它是重量級(jí)的,這意味著不能隨意創(chuàng)建或銷毀它的實(shí)例。如果應(yīng)用只訪問一個(gè)數(shù)據(jù)庫,只需要?jiǎng)?chuàng)建一個(gè)SessionFactory實(shí)例,在應(yīng)用初始化的時(shí)候創(chuàng)建該實(shí)例。如果應(yīng)用同時(shí)訪問多個(gè)數(shù)據(jù)庫,則需要為每個(gè)數(shù)據(jù)庫創(chuàng)建一個(gè)單獨(dú)的SessionFactory實(shí)例。
之所以稱SessionFactory是重量級(jí)的,是因?yàn)樗枰粋€(gè)很大的緩存,用來存放預(yù)定義的SQL語句以能映射元數(shù)據(jù)等。用戶還可以為SesionFactory配置一個(gè)緩存插件,這個(gè)緩存插件被稱為Hibernate的第二級(jí)緩存。,該緩存用來存放被工作單元讀過的數(shù)據(jù),將來其他工作單元可能會(huì)重用這些數(shù)據(jù),因此這個(gè)緩存中的數(shù)據(jù)能夠被所有工作單元共享。一個(gè)工作單元通常對(duì)應(yīng)一個(gè)數(shù)據(jù)庫事務(wù)。
3.Session接口
Session接口是Hibernate應(yīng)用使用最廣泛的接口。Session也被稱為持久化管理器,它提供了和持久化相關(guān)的操作,如添加、更新、刪除、加載和查詢對(duì)象。
Session有以下特點(diǎn):
不是線程安全的,因此在設(shè)計(jì)軟件架構(gòu)時(shí),應(yīng)該避免多個(gè)線程共享同一個(gè)Session實(shí)例。
Session實(shí)例是輕量級(jí)的,所謂輕量級(jí),是指它的創(chuàng)建和銷毀不需要消耗太多的資源。這意味著在程序中可以經(jīng)常創(chuàng)建和銷毀Session對(duì)象,例如為每個(gè)客戶請(qǐng)示分配單獨(dú)的Session實(shí)例,或者為每個(gè)工作單元分配單獨(dú)的Session實(shí)例。
Session有一個(gè)緩存,被稱為Hibernate的第一級(jí)緩存,它存放被當(dāng)前工作單元加載的對(duì)象。每個(gè)Session實(shí)例都有自己的緩存,這個(gè)Sesion實(shí)例的緩存只能被當(dāng)前工作單元訪問。
4.Transaction接口
Transaction接口是Hibernate的數(shù)據(jù)庫事務(wù)接口,它對(duì)底層的事務(wù)接口做了封裝,底層事務(wù)接口包括:
JDBC API、JTA(Java Transaction API)、CORBA(Common Object Requet Broker Architecture)API
Hibernate應(yīng)用可通過一致的Transaction接口來聲明事務(wù)邊界,這有助于應(yīng)用在不同的環(huán)境容器中移植。盡管應(yīng)用也可以繞過Transaction接口,直接訪問底層的事務(wù)接口,這種方法不值得推薦,因?yàn)樗焕趹?yīng)用在不同的環(huán)境移植。
5.Query和Criteria接口
Query和Criteria接口是Hibernate的查詢接口,用于向數(shù)據(jù)庫查詢對(duì)象,以及控制執(zhí)行查詢的過程。Query實(shí)例包裝了一個(gè)HQL查詢語句,HQL查詢語句和SQL查詢語句有些相似,但HQL查詢語句是面向?qū)ο蟮?,它引用類句及類的屬性句,而不是表句及表的字段句。Criteria接口完全封裝了基于字符串的查詢語句,比Query接口更加面向?qū)ο?,Criteria接口擅長執(zhí)行動(dòng)態(tài)查詢。
Session接口的find()方法也具有數(shù)據(jù)查詢功能,但它只是執(zhí)行一些簡(jiǎn)單的HQL查詢語句的快捷方法,它的功能遠(yuǎn)沒有Query接口強(qiáng)大。
本文關(guān)于Hibernate核心思想與接口的介紹就到這里,希望對(duì)大家有所幫助。感謝大家對(duì)本站的支持!
相關(guān)文章
MyBatis實(shí)現(xiàn)高級(jí)映射的示例代碼
高級(jí)映射主要還是映射,只是映射中的數(shù)據(jù)關(guān)系復(fù)雜了,其中就包括一對(duì)一、一對(duì)多、多對(duì)多的關(guān)系,本文主要介紹了MyBatis實(shí)現(xiàn)高級(jí)映射的示例代碼,感興趣的可以了解一下2024-06-06劍指Offer之Java算法習(xí)題精講二叉樹與斐波那契函數(shù)
跟著思路走,之后從簡(jiǎn)單題入手,反復(fù)去看,做過之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化2022-03-03springboot+thymeleaf+mybatis實(shí)現(xiàn)甘特圖的詳細(xì)過程
這篇文章主要介紹了springboot+thymeleaf+mybatis實(shí)現(xiàn)甘特圖的詳細(xì)過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07深入解析Java中的編碼轉(zhuǎn)換以及編碼和解碼操作
這篇文章主要介紹了Java中的編碼轉(zhuǎn)換以及編碼和解碼操作,文中詳細(xì)解讀了編碼解碼的相關(guān)IO操作以及內(nèi)存使用方面的知識(shí),需要的朋友可以參考下2016-02-02java 定時(shí)器Timer和TimerTask的使用詳解(執(zhí)行和暫停)
這篇文章主要介紹了java 定時(shí)器Timer和TimerTask的使用詳解(執(zhí)行和暫停),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11