有關(guān)Hibernate知識(shí)的學(xué)習(xí)(八)

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市低散,隨后出現(xiàn)的幾起案子俯邓,更是在濱河造成了極大的恐慌,老刑警劉巖熔号,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稽鞭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡引镊,警方通過(guò)查閱死者的電腦和手機(jī)朦蕴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)弟头,“玉大人吩抓,你說(shuō)我怎么就攤上這事×链桑” “怎么了琴拧?”我有些...
    開(kāi)封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)嘱支。 經(jīng)常有香客問(wèn)我蚓胸,道長(zhǎng),這世上最難降的妖魔是什么除师? 我笑而不...
    開(kāi)封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任沛膳,我火速辦了婚禮,結(jié)果婚禮上汛聚,老公的妹妹穿的比我還像新娘锹安。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布叹哭。 她就那樣靜靜地躺著忍宋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪风罩。 梳的紋絲不亂的頭發(fā)上糠排,一...
    開(kāi)封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音超升,去河邊找鬼入宦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛室琢,可吹牛的內(nèi)容都是我干的乾闰。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼盈滴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涯肩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起雹熬,我...
    開(kāi)封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宽菜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后竿报,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體铅乡,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年烈菌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了阵幸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芽世,死狀恐怖挚赊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情济瓢,我是刑警寧澤荠割,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站旺矾,受9級(jí)特大地震影響蔑鹦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜箕宙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一嚎朽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柬帕,春花似錦哟忍、人聲如沸狡门。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)其馏。三九已至,卻和暖如春粗蔚,著一層夾襖步出監(jiān)牢的瞬間尝偎,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工鹏控, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肤寝。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓当辐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鲤看。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缘揪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容