为什么使用hibernate
hibernate是一個(gè)開(kāi)源的持久化對(duì)象關(guān)系映射的框架,他對(duì)jdbc進(jìn)行了輕量級(jí)的封裝,而我們可以使用
面向?qū)ο蟮乃枷雭?lái)操縱數(shù)據(jù)庫(kù)
?
hibernate的和新街口;
?
session;負(fù)責(zé)被持久化對(duì)象的crud操作;
sessionfactory;負(fù)責(zé)初始化hibernate,創(chuàng)建session對(duì)象
configuration;負(fù)責(zé)配置并啟動(dòng)hibernate,創(chuàng)建sessionfactory
transaction;負(fù)責(zé)事物的相關(guān)的操作
query和criteria接口;負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫(kù)查詢
?
為什么使用hibernate?
1,對(duì)jdbc訪問(wèn)數(shù)據(jù)庫(kù)的代碼做了封裝,大大簡(jiǎn)化了數(shù)據(jù)訪問(wèn)層繁瑣的重復(fù)性代碼
2,hibernate是一個(gè)優(yōu)秀的主流orm框架,支持各種數(shù)據(jù)庫(kù),
3,hibernate使用java反射機(jī)制,而不是自己?jiǎn)釖赍X(qián)程序來(lái)實(shí)現(xiàn)透明性
?
hibernate是如何演示加載?get與load的區(qū)別
?
1,對(duì)于hibernate get方法,hibernate會(huì)確認(rèn)一下該id對(duì)應(yīng)的數(shù)據(jù)是否存在,首先在session緩存中
查找,然后在二級(jí)緩存中查找,還沒(méi)有就查詢數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中沒(méi)有就返回null
2,hibernate load方法加載實(shí)體對(duì)象的時(shí)候,根據(jù)映射文件上類級(jí)別的lazy屬性配置(默認(rèn)true)
分情況;
001,若為true則首先在session緩存中查找,查看該id對(duì)應(yīng)的對(duì)象是否存在,不存在則使用演示加
載,返回實(shí)體的代理類對(duì)象,等到具體使用該對(duì)象的時(shí)候,在查詢二級(jí)緩存和數(shù)據(jù)庫(kù),若仍沒(méi)發(fā)現(xiàn)符
合條件的記錄,則會(huì)拋出ObjectNotFountException
002,若為false,就跟hibernate的fet方法查找順序一樣,知識(shí)最終若沒(méi)有發(fā)現(xiàn)符合條件的記錄,則會(huì)拋出一個(gè)ObjectNotFoundException
?
get與load的區(qū)別
1,如果未發(fā)現(xiàn)符合條件的記錄,hibernate的get方法返回null,而load方法會(huì)拋出
ObjectNotFoundException
2,load方法可返回沒(méi)有加載實(shí)體數(shù)據(jù)的代理類實(shí)例,而get方法永遠(yuǎn)返回有時(shí)有實(shí)體數(shù)據(jù)的對(duì)象
3,get方法會(huì)立即執(zhí)行,而load方法是在調(diào)用的時(shí)候才執(zhí)行
?
hibernate緩存機(jī)制
緩存作用;
hibernate是一個(gè)持久層框架,經(jīng)常訪問(wèn)物理數(shù)據(jù)庫(kù),為了降低應(yīng)用程序?qū)ξ锢頂?shù)據(jù)庫(kù)訪問(wèn)的次數(shù),
從未提高應(yīng)用程序的運(yùn)行性能,從而引入了緩存,緩存內(nèi)的數(shù)據(jù)是對(duì)物理數(shù)據(jù)源中的數(shù)據(jù)的復(fù)制,應(yīng)
用程序咋運(yùn)行時(shí)從緩存讀寫(xiě)數(shù)據(jù),在特定時(shí)刻或時(shí)間會(huì)同步緩存和物理數(shù)據(jù)源的數(shù)據(jù)
?
hibernate緩存分類
hibernate緩存包括兩大類,hibernate一級(jí)緩存和hibernate二級(jí)緩存
hibernate一級(jí)緩存;又稱為session緩存,它是內(nèi)置的,意思是說(shuō),只要使用hibernate就必須使用
session緩存,他的緩存是事物范圍的緩存,在一級(jí)緩存中,持久化測(cè)類的每個(gè)實(shí)例都具有唯一的
OID
hibernate二級(jí)緩存;又稱為sessionfactory的緩存,由于sessionfactory對(duì)象的生命周期和應(yīng)用程
序的整個(gè)過(guò)程對(duì)應(yīng),因此二級(jí)緩存是進(jìn)程范圍或者集群范圍的緩存,有可能出現(xiàn)并發(fā)問(wèn)題,二級(jí)緩存
是可選的,是一個(gè)可配置的插件,在默認(rèn)情況下,sessionfactory不會(huì)啟用這個(gè)插件
?
什么樣的數(shù)據(jù)適合存放到二級(jí)緩存中?
1,很少被修改的數(shù)據(jù)
2,不是很重要的數(shù)據(jù),允許出現(xiàn)偶爾并發(fā)的數(shù)據(jù)
3,不會(huì)被并發(fā)訪問(wèn)的數(shù)據(jù)
4,常量數(shù)據(jù)
?
不適合放到二級(jí)緩存中的數(shù)據(jù)?
1,經(jīng)常被修改的數(shù)據(jù)
2,絕對(duì)不允許出現(xiàn)并發(fā)訪問(wèn)的數(shù)據(jù),如財(cái)務(wù)數(shù)據(jù),
3,與其他應(yīng)用共享的數(shù)據(jù)
?
轉(zhuǎn)載于:https://www.cnblogs.com/liuyunfei/p/7115560.html
總結(jié)
以上是生活随笔為你收集整理的为什么使用hibernate的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【bzoj4408】[Fjoi 2016
- 下一篇: 2 - 4 - 实例:X86的中断与异常