高級映射(resultMap返回)首先 書寫查詢語句
其次 配置resultMap
什么是延遲加載resultMap可以實(shí)現(xiàn)高級映射(使用association,、collection實(shí)現(xiàn)一對一及一對多映射),,association、collection具備延遲加載的功能 需求: 如果查詢訂單并且關(guān)聯(lián)查詢用戶信息,。如果先查詢訂單信息即可滿足要求,,當(dāng)我們需要查詢用戶信息時再查詢用戶信息。把對用戶信息的按需去查詢就是延遲加載,。 延遲加載:先從單表來查,,再需要時再從關(guān)聯(lián)表去關(guān)聯(lián)查詢,大大提高數(shù)據(jù)庫性能,,因?yàn)椴樵儐伪硪汝P(guān)聯(lián)查詢多張表,,所以速度要快,。
查詢緩存mybatis提供查詢緩存,用于減輕數(shù)據(jù)庫的壓力(提高數(shù)據(jù)庫的性能) mybatis提供一級緩存,、二級緩存
一級緩存是sqlSession級別的緩存 在操作數(shù)據(jù)庫時需要構(gòu)造sqlSession對象,,在對象中有一個數(shù)據(jù)結(jié)構(gòu)(hashMap)用于存儲緩存數(shù)據(jù) 不同的sqlSession之間的緩存數(shù)據(jù)區(qū)域(hashMap)是互相不影響的 二級緩存是mapper級別的緩存 多個sqlSession去操作同一個mapper的sql語句,多個sqlSession可以共用二級緩存,,二級緩存是跨sqlSession的 為什么要用緩存,? 如果緩存中有數(shù)據(jù)就不用從數(shù)據(jù)庫中獲取,大大提高了系統(tǒng)的性能
一級緩存二級緩存首先開啟mybatis二級緩存 sqlSession1去查詢用戶id為1的用戶信息,,查詢到用戶信息會將查詢數(shù)據(jù)存儲到二級緩存中 如果sqlSession3去執(zhí)行相同mapper下sql,,并且執(zhí)行commit提交,清空該mapper下的二級緩存區(qū)域的數(shù)據(jù) sqlSession2去查詢用戶id為1的用戶信息,,去緩存中找是否存在直接從緩存中取出數(shù)據(jù) 二級緩存與一級緩存區(qū)別,,二級緩存的范圍更大,多個sqlSession可以共享一個UserMapper的二級緩存區(qū)域,。UserMapper有一個二級緩存區(qū)域(按照namespace分),,其他mapper也有自己的二級緩存區(qū)域(按namespace分) 每一個namespace的mapper有一個二級緩存區(qū)域,兩個mapper的namespace如果相同,,這兩個mapper執(zhí)行sql查詢到數(shù)據(jù)將存在相同的二級緩存區(qū)域中
mybatis的二級緩存是mapper范圍級別,,除了在sqlMapConfig.xml中設(shè)置二級緩存開關(guān),還要在具體的mapper.xml中開啟二級緩存
mybatis整合ehcacheehcache是一個分布式緩存框架
為了提高系統(tǒng)并發(fā),,性能,、一般對系統(tǒng)進(jìn)行分布式部署(集群部署方式) 如果不使用分布式緩存,,緩存的數(shù)據(jù)在各各服務(wù)器單獨(dú)存儲,,不方便開發(fā),所以要使用分布式緩存對緩存數(shù)據(jù)進(jìn)行集中管理 mybatis無法實(shí)現(xiàn)分布式緩存,,需要和其他分布式緩存框架進(jìn)行整合,。
mybatis提供了一個cache接口,如果要實(shí)現(xiàn)自己的緩存邏輯,,實(shí)現(xiàn)cache接口開發(fā)即可,。 例如: mybatis和ehcache整合,mybatis和ehcache整合包中提供了一個cache接口實(shí)現(xiàn)類,。
默認(rèn)實(shí)現(xiàn)的cache類:
加入ehcache包導(dǎo)入jar包或者maven下載jar包 配置 二級緩存使用場景對于訪問多的查詢請求且用戶對查詢結(jié)果實(shí)時性要求不高,,此時可采用mybatis二級緩存技術(shù)降低數(shù)據(jù)庫訪問量,提高訪問速度,,業(yè)務(wù)場景比如:耗時較高的統(tǒng)計分析sql,、電話賬單查詢sql等 實(shí)現(xiàn)方法如下: 通過社會之刷新時間,由mybatis每隔一段時間自動清空緩存,,根據(jù)數(shù)據(jù)變化頻率設(shè)置緩存刷新間隔flushInterval,,比如設(shè)置為30分鐘,、60分鐘、24小時等,,根據(jù)需求而定
二級緩存的局限性mybatis二級緩存對細(xì)粒度的數(shù)據(jù)級別的緩存實(shí)現(xiàn)不好,,比如以下需求:對商品進(jìn)行信息的詳情查詢,每個用戶都有一條二級緩存記錄,,當(dāng)有很多個用戶都訪問了時候,,就會存在很多條記錄,但是當(dāng)進(jìn)行commit時就將所有的記錄全部清空,,下次查詢時繼續(xù)添加到二級緩存,,這樣就造成了細(xì)粒度的數(shù)據(jù)的緩存不好
|