Hibernate的概念和api的使用
實(shí)體類的編寫規(guī)則
1掩浙、實(shí)體類中的屬性都是私有的
2月匣、私有屬性使用公開(kāi)的set()和get()
3哥谷、要求實(shí)體類中要有屬性作為唯一值(用戶名可以相同亿乳,一般使用id值)
4熊痴、實(shí)體類中的屬性建議不使用基本數(shù)據(jù)類型先较,使用基本數(shù)據(jù)類型的包裝類
八個(gè)基本數(shù)據(jù)類型對(duì)應(yīng)的包裝類
int-Integer
char-Character
其他的都是首字母的大寫
包裝類可以使用Integer a = null
hibernate主鍵生成策略
1陈辱、hibernate中要求實(shí)體類里面有一個(gè)屬性作為唯一值盒刚,對(duì)應(yīng)表主鍵,主鍵可以不同生成策略
2倒庵、hibernate主鍵生成策略有很多
3褒墨、在class屬性里面有很多值
native根據(jù)使用的數(shù)據(jù)庫(kù)幫忙選擇用哪個(gè)值
UUID之前web階段寫代碼生成UUID值炫刷,hibernate幫忙生成UUID
4、演示生成策略UUID
使用UUID生成策略
將屬性換成String類型
配置的部分寫出UUID值
實(shí)體類的操作
crud操作
添加操作
調(diào)用session里面的save方法實(shí)現(xiàn)
根據(jù)id查詢
根據(jù)id值查詢返回一條記錄郁妈,返回一個(gè)對(duì)象
hibernate會(huì)生成表浑玛,但是不會(huì)生成數(shù)據(jù)庫(kù)
修改操作:
根據(jù)id查詢值
然后往里面設(shè)置內(nèi)容
調(diào)用update()
刪除操作:
調(diào)用session里面的delete()
實(shí)體類對(duì)象狀態(tài)
三種狀態(tài):
瞬時(shí)態(tài)
對(duì)象里面沒(méi)有id值,對(duì)象與session也沒(méi)有關(guān)聯(lián)
一般都是做的添加的操作
持久態(tài)
對(duì)象里面有id值噩咪,對(duì)象與session之間也有關(guān)聯(lián)
修改操作
脫管態(tài)
對(duì)象里面有id值顾彰,對(duì)象與session之間沒(méi)有關(guān)聯(lián)
saveOrupdate做的是修改的操作
hibernate的一級(jí)緩存
什么是緩存:
數(shù)據(jù)庫(kù)本身就是一個(gè)文件系統(tǒng),在java中要使用流的方式操作文件剧腻,效率不高
把數(shù)據(jù)存到內(nèi)存里面拘央,不需要使用流的方式,可以直接讀取內(nèi)存中的數(shù)據(jù)
把數(shù)據(jù)放到內(nèi)存中书在,提高讀取的效率
hibernate的緩存:
hibernate框架中提供了很多優(yōu)化方式灰伟,hibernate緩存就是一個(gè)優(yōu)化方式
hibernate的緩存的特點(diǎn):
hibernate的第一類緩存:一級(jí)緩存
hibernate的一級(jí)緩存默認(rèn)是打開(kāi)的
hibernate的一級(jí)緩存有自己的使用范圍,是session范圍(從session的創(chuàng)建到關(guān)閉)
hibernate的一級(jí)緩存中必須是持久態(tài)的數(shù)據(jù)
hibernate的第二類緩存:二級(jí)緩存
目前已經(jīng)不使用了儒旬,用Redis來(lái)替代二級(jí)緩存
二級(jí)緩存默認(rèn)不是打開(kāi)的
二級(jí)緩存的使用范圍栏账,是整個(gè)項(xiàng)目的范圍(SessionFactory的范圍)
驗(yàn)證一級(jí)緩存的存在:
1、根據(jù)uid=1查詢栈源,返回對(duì)象
2挡爵、再根據(jù)uid=1查詢,返回對(duì)象
第二次不發(fā)送SQL語(yǔ)句甚垦,查詢的是一級(jí)緩存的內(nèi)容
Hibernate一級(jí)緩存的執(zhí)行過(guò)程:
首先查詢一級(jí)緩存茶鹃,查詢一級(jí)緩存發(fā)現(xiàn)沒(méi)有數(shù)據(jù),才會(huì)查詢數(shù)據(jù)庫(kù)艰亮,返回持久態(tài)的對(duì)象
其次闭翩,把持久態(tài)的對(duì)象放到一級(jí)緩存中
第二次查詢的時(shí)候先去查一級(jí)緩存,發(fā)現(xiàn)一級(jí)緩存中有相同的數(shù)據(jù)迄埃,就直接返回
一級(jí)緩存的結(jié)構(gòu):
存的不是整個(gè)的對(duì)象疗韵,只是存的值
根據(jù)id判斷是否是相同的內(nèi)容,相同的話將值重組成一個(gè)新的對(duì)象
hibernate一級(jí)緩存的特性
持久態(tài)自動(dòng)更新數(shù)據(jù)庫(kù)
先查數(shù)據(jù)庫(kù)中的記錄侄非,然后修改數(shù)據(jù)蕉汪,不用調(diào)用update或者save方法,直接調(diào)用Transaction里面的提交方法就可以自動(dòng)提交
根據(jù)SQL語(yǔ)句輸出可以看到有一條update語(yǔ)句的發(fā)送
執(zhí)行的過(guò)程:
創(chuàng)建session的時(shí)候會(huì)有一級(jí)緩存逞怨,在一級(jí)緩存對(duì)應(yīng)的區(qū)域有一個(gè)快照區(qū)(副本)
1者疤、把查詢返回后的持久態(tài)對(duì)象放到一級(jí)緩存中,同時(shí)放到一級(jí)緩存對(duì)應(yīng)的快照區(qū)
2叠赦、修改持久態(tài)對(duì)象里面的值宛渐,同時(shí)修改一級(jí)緩存中的內(nèi)容
會(huì)修改一級(jí)緩存的內(nèi)容,但是不會(huì)修改一級(jí)緩存對(duì)應(yīng)的快照區(qū)的內(nèi)容
最后提交事務(wù):
提交事務(wù)的時(shí)候眯搭,做一件事情:
比較一級(jí)緩存中的內(nèi)容和對(duì)應(yīng)的一級(jí)緩存中的內(nèi)容窥翩,如果二者數(shù)據(jù)不相同,把一級(jí)緩存中的內(nèi)容更新到數(shù)據(jù)庫(kù)里面
如果相同鳞仙,就不會(huì)更新到數(shù)據(jù)庫(kù)里面
Hibernate事務(wù)操作:
事務(wù)相關(guān)概念
什么是事務(wù):
事務(wù)是操作中的單元寇蚊,事務(wù)要么都成功,要么都失敗
事務(wù)的特性:
不考慮隔離性會(huì)產(chǎn)生的問(wèn)題:
臟讀
不可重復(fù)讀
虛讀
解決方法:
設(shè)置隔離級(jí)別
mysql的默認(rèn)隔離級(jí)別 repeatable read
在hibernate的配置文件中也可以設(shè)置隔離級(jí)別棍好,但是用的不多
Hibernate事務(wù)的規(guī)范代碼的寫法
代碼結(jié)構(gòu):
try{
//開(kāi)啟事務(wù)
//提交事務(wù)
}catch(HibernateException e){
//回滾事務(wù)
}finally{
//關(guān)閉
}
Hibernate綁定session
類似于jdbc中的connection仗岸,之前web階段的ThreadLocal
幫實(shí)現(xiàn)與本地線程綁定session
獲取與本地線程綁定的session:
1、在hibernate核心配置文件中進(jìn)行配置
寫在hibernate部分
<property name="hibernate.current_session_context_class">thread</property>
2借笙、在SessionFactory里面的方法得到
sessionFactory.getCurrentSession()
前提是在核心配置文件中配置了
3扒怖、Session直接得到,就不用調(diào)用SessionFactory和opensession方法了
真正的SessionFactory不需要關(guān)閉
4业稼、獲取與本地線程綁定session的時(shí)候盗痒,關(guān)閉session的時(shí)候報(bào)錯(cuò)
org.hibernate.SessionException:Session was already closed
不需要關(guān)閉session
有關(guān)Hibernate知識(shí)的學(xué)習(xí)(八)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)弟头,“玉大人吩抓,你說(shuō)我怎么就攤上這事×链桑” “怎么了琴拧?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)嘱支。 經(jīng)常有香客問(wèn)我蚓胸,道長(zhǎng),這世上最難降的妖魔是什么除师? 我笑而不...
- 正文 為了忘掉前任沛膳,我火速辦了婚禮,結(jié)果婚禮上汛聚,老公的妹妹穿的比我還像新娘锹安。我一直安慰自己,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布叹哭。 她就那樣靜靜地躺著忍宋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪风罩。 梳的紋絲不亂的頭發(fā)上糠排,一...
- 那天,我揣著相機(jī)與錄音超升,去河邊找鬼入宦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛室琢,可吹牛的內(nèi)容都是我干的乾闰。 我是一名探鬼主播,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼盈滴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涯肩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起雹熬,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宽菜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后竿报,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體铅乡,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年烈菌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了阵幸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布,位于F島的核電站旺矾,受9級(jí)特大地震影響蔑鹦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜箕宙,卻給世界環(huán)境...
- 文/蒙蒙 一嚎朽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柬帕,春花似錦哟忍、人聲如沸狡门。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)其馏。三九已至,卻和暖如春粗蔚,著一層夾襖步出監(jiān)牢的瞬間尝偎,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓当辐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鲤看。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缘揪,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- “我的老父親我最親愛(ài)的人,這輩子做您的兒女我還沒(méi)做夠……”害怕聽(tīng)到又渴望聽(tīng)到這首《父親》的歌义桂,每次我都潸然淚下找筝,深...
- 修改主機(jī)名:修改文件/etc/sysconfig/network 重啟 檢查是否生效 或使用這個(gè)命令可以立即修改主...