Mybatis基于XML配置開(kāi)發(fā)之延遲加載與緩存

? 首先,推薦一個(gè)免費(fèi)的云服務(wù)器提供商宋彼,三豐云弄砍,有了云服務(wù)器,我們使用ssh連接linux系統(tǒng)的云服務(wù)器输涕。

?? Mybatis框架的開(kāi)發(fā)模式有兩種:1音婶,基于XML文件配置的方式;2莱坎,基于注解方式的項(xiàng)目開(kāi)發(fā)衣式。一個(gè)項(xiàng)目的開(kāi)發(fā)通常不會(huì)混合使用兩種方式的。

同樣檐什,對(duì)應(yīng)的項(xiàng)目源碼倉(cāng)庫(kù)地在:https://github.com/Jesselinux/Java_Web

一碴卧,延遲加載:mybatis_test04_mysql_lazy

二,緩存:mybatis_test05_mysql_cache

首先操作MySQL數(shù)據(jù)庫(kù)厢汹,添加項(xiàng)目所需要的數(shù)據(jù)表格:

DROPTABLEIFEXISTS`user`;?CREATETABLE`user`(`id`int(11)NOTNULLauto_increment,`username`varchar(32)NOTNULLCOMMENT'用戶名稱',`birthday`datetimedefaultNULLCOMMENT'生日',`sex`char(1)defaultNULLCOMMENT'性別',`address`varchar(256)defaultNULLCOMMENT'地址',PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;???insertinto`user`(`id`,`username`,`birthday`,`sex`,`address`)values(41,'Jesse001','2018-02-27 17:47:08','男','北京'),(42,'Jesse002','2018-03-02 15:09:37','女','浙江 杭州'),(43,'Jesse508','2018-03-04 11:34:34','女','浙江 杭州'),(45,'jesse888','2018-03-04 12:04:06','男','浙江 杭州'),(46,'小明','2018-03-07 17:37:26','男','北京'),(48,'曉麗','2018-03-08 11:44:00','女','上海 楊浦');?????DROPTABLEIFEXISTS`account`;?CREATETABLE`account`(`ID`int(11)NOTNULLCOMMENT'編號(hào)',`UID`int(11)defaultNULLCOMMENT'用戶編號(hào)',`MONEY`doubledefaultNULLCOMMENT'金額',PRIMARYKEY(`ID`),KEY`FK_Reference_8`(`UID`),CONSTRAINT`FK_Reference_8`FOREIGNKEY(`UID`)REFERENCES`user`(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;???insertinto`account`(`ID`,`UID`,`MONEY`)values(1,41,1000),(2,45,1000),(3,41,2000);???DROPTABLEIFEXISTS`role`;?CREATETABLE`role`(`ID`int(11)NOTNULLCOMMENT'編號(hào)',`ROLE_NAME`varchar(30)defaultNULLCOMMENT'角色名稱',`ROLE_DESC`varchar(60)defaultNULLCOMMENT'角色描述',PRIMARYKEY(`ID`))ENGINE=InnoDBDEFAULTCHARSET=utf8;???insertinto`role`(`ID`,`ROLE_NAME`,`ROLE_DESC`)values(1,'院長(zhǎng)','管理整個(gè)學(xué)院'),(2,'總裁','管理整個(gè)公司'),(3,'校長(zhǎng)','管理整個(gè)學(xué)校');?????DROPTABLEIFEXISTS`user_role`;?CREATETABLE`user_role`(`UID`int(11)NOTNULLCOMMENT'用戶編號(hào)',`RID`int(11)NOTNULLCOMMENT'角色編號(hào)',PRIMARYKEY(`UID`,`RID`),KEY`FK_Reference_10`(`RID`),CONSTRAINT`FK_Reference_10`FOREIGNKEY(`RID`)REFERENCES`role`(`ID`),CONSTRAINT`FK_Reference_9`FOREIGNKEY(`UID`)REFERENCES`user`(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;?insertinto`user_role`(`UID`,`RID`)values(41,1),(45,1),(41,2);???

一螟深,延遲加載

? 即在需要用到數(shù)據(jù)時(shí)才進(jìn)行加載谐宙,不需要用到數(shù)據(jù)時(shí)就不加載數(shù)據(jù)烫葬。延遲加載也稱懶加載.

? 優(yōu)點(diǎn):先從單表查詢,需要時(shí)再?gòu)年P(guān)聯(lián)表去關(guān)聯(lián)查詢凡蜻,大大提高數(shù)據(jù)庫(kù)性能搭综,因?yàn)椴樵儐伪硪汝P(guān)聯(lián)查詢多張表速

度要快。

1划栓,配置SqlMapConfig.xml

<!-- 配置參數(shù) --><!-- 開(kāi)啟mybatis延遲加載 -->

? 本次只是將 Account 對(duì)象查詢出來(lái)放入 List 集合中兑巾,并沒(méi)有涉及到 User 對(duì)象,所以就沒(méi)有 發(fā)出 SQL 語(yǔ)句查詢賬戶所關(guān)聯(lián)的 User 對(duì)象的查詢忠荞。實(shí)現(xiàn)了延遲加載蒋歌。

二,緩存


? 一級(jí)緩存是 SqlSession 級(jí)別的緩存委煤,只要 SqlSession 沒(méi)有 flush 或 close堂油,它就存在。

二級(jí)緩存是 mapper 映射級(jí)別的緩存碧绞,多個(gè) SqlSession 去操作同一個(gè) Mapper 映射的 sql 語(yǔ)句府框,多個(gè)SqlSession 可以共用二級(jí)緩存,二級(jí)緩存是跨 SqlSession 的讥邻。

1迫靖,一級(jí)緩存:

配置IUserDao.xml院峡,useCache="true"

<!-- 根據(jù)id查詢賬戶列表 -->? ? ? ? select * from user where id = #{uid}?


? 我們可以發(fā)現(xiàn),雖然在上面的代碼中我們查詢了兩次系宜,但最后只執(zhí)行了一次數(shù)據(jù)庫(kù)操作照激,這就是 Mybatis 提 供給我們的一級(jí)緩存在起作用了。因?yàn)橐患?jí)緩存的存在盹牧,導(dǎo)致第二次查詢 id 為 50 的記錄時(shí)实抡,并沒(méi)有發(fā)出 sql 語(yǔ)句,從數(shù)據(jù)庫(kù)中查詢數(shù)據(jù)欢策,而是從一級(jí)緩存中查詢吆寨。

2,二級(jí)緩存

配置SqlMapConfig.xml

<!-- 配置開(kāi)啟二級(jí)緩存 -->?

? ?查看測(cè)試結(jié)果踩寇,我們發(fā)現(xiàn)執(zhí)行了兩次查詢啄清,并且在執(zhí)行第一次查詢后,我們關(guān)閉了一級(jí)緩存俺孙,再去執(zhí)行第二 次查詢時(shí)辣卒,我們發(fā)現(xiàn)并沒(méi)有對(duì)數(shù)據(jù)庫(kù)發(fā)出 sql 語(yǔ)句,所以此時(shí)的數(shù)據(jù)就只能是來(lái)自于我們所說(shuō)的二級(jí)緩存睛榄。


參考鏈接:https://mp.weixin.qq.com/s/KIP_67sAcXemOvQ6PA4Kag

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荣茫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子场靴,更是在濱河造成了極大的恐慌啡莉,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旨剥,死亡現(xiàn)場(chǎng)離奇詭異咧欣,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)轨帜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)魄咕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蚌父,你說(shuō)我怎么就攤上這事哮兰。” “怎么了苟弛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵喝滞,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我嗡午,道長(zhǎng)囤躁,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮狸演,結(jié)果婚禮上言蛇,老公的妹妹穿的比我還像新娘。我一直安慰自己宵距,他們只是感情好腊尚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著满哪,像睡著了一般婿斥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哨鸭,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天民宿,我揣著相機(jī)與錄音,去河邊找鬼像鸡。 笑死活鹰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的只估。 我是一名探鬼主播志群,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蛔钙!你這毒婦竟也來(lái)了锌云?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吁脱,失蹤者是張志新(化名)和其女友劉穎桑涎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體豫喧,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡石洗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了紧显。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缕棵,死狀恐怖孵班,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情招驴,我是刑警寧澤篙程,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站别厘,受9級(jí)特大地震影響虱饿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一氮发、第九天 我趴在偏房一處隱蔽的房頂上張望渴肉。 院中可真熱鬧,春花似錦爽冕、人聲如沸仇祭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)乌奇。三九已至,卻和暖如春眯娱,著一層夾襖步出監(jiān)牢的瞬間礁苗,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工徙缴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寂屏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓娜搂,卻偏偏與公主長(zhǎng)得像迁霎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子百宇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354