java工程師進(jìn)階之MyBatis延遲加載的使用
什么是延遲加載?
延遲加載也叫懶加載、惰性加載,使⽤延遲加載可以提⾼程序的運(yùn)行效率,針對(duì)于數(shù)據(jù)持久層的操作, 在某些特定的情況下去訪問(wèn)特定的數(shù)據(jù)庫(kù),在其他情況下可以不訪問(wèn)某些表,從⼀定程度上減少了 Java 應(yīng)⽤與數(shù)據(jù)庫(kù)的交互次數(shù)。
查詢學(xué)⽣和班級(jí)的時(shí),學(xué)生和班級(jí)是兩張不同的表,如果當(dāng)前需求只需要獲取學(xué)shengsheng的信息,那么查詢學(xué) ⽣單表即可,如果需要通過(guò)學(xué)⽣獲取對(duì)應(yīng)的班級(jí)信息,則必須查詢兩張表。 不同的業(yè)務(wù)需求,需要查詢不同的表,根據(jù)具體的業(yè)務(wù)需求來(lái)動(dòng)態(tài)減少數(shù)據(jù)表查詢的⼯作就是延遲加載。
如何使用延遲加載?
1.在 config.xml 中開(kāi)啟延遲加載
<settings> <!-- 打印SQL--> <setting name="logImpl" value="STDOUT_LOGGING" /> <!-- 開(kāi)啟延遲加載 --> <setting name="lazyLoadingEnabled" value="true"/> </settings>
2.將多表關(guān)聯(lián)查詢拆分成多個(gè)單表查詢
StudentRepository中
public Student findByIdLazy(long id);
StudentRepository.xml
<resultMap id="studentMapLazy" type="entity.Student"> <id column="id" property="id"></id> <result column="name" property="name"></result> <association property="classes" javaType="entity.Classes" select="repository.ClassesRepository.findByIdLazy" column="cld"> </association> </resultMap> <select id="findByIdLazy" parameterType="long" resultMap="studentMapLazy"> -- select s.id ,s.name,c.id as cid,c.name as cname from student s,classes c where s.id =1 and s.cld=c.id; select * from student where id=#{id}; </select>
ClassesRepository
public Classes findByIdLazy(long id);
<resultMap id="classesMap" type="entity.Classes"> <id column="cid" property="id"></id> <result column="cname" property="name"></result> <collection property="students" ofType="entity.Student"> <id column="id" property="id"></id> <result column="name" property="name"></result> </collection> </resultMap>
以上就是java工程師進(jìn)階之MyBatis延遲加載的使用的詳細(xì)內(nèi)容,更多關(guān)于java之MyBatis延遲加載的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
10分鐘在服務(wù)器部署好Jenkins的詳細(xì)過(guò)程
這篇文章主要介紹了10分鐘在服務(wù)器部署好Jenkins,本文主要是?Jenkins?的安裝部署,那前提我們應(yīng)該裝好?Git?Maven?JDK,準(zhǔn)備工作本文不給大家詳細(xì)介紹了,對(duì)服務(wù)器部署Jenkins相關(guān)知識(shí)感興趣的朋友一起看看吧2022-08-08Java并發(fā)統(tǒng)計(jì)變量值偏差原因及解決方案
這篇文章主要介紹了Java并發(fā)統(tǒng)計(jì)變量值偏差原因及解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06SpringBoot應(yīng)用jar包啟動(dòng)原理詳解
本文主要介紹了SpringBoot應(yīng)用jar包啟動(dòng)原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03從實(shí)戰(zhàn)角度詳解Disruptor高性能隊(duì)列
這篇文章主要介紹了從實(shí)戰(zhàn)角度詳解Disruptor高性能隊(duì)列,對(duì)正在學(xué)習(xí)這方面知識(shí)的小伙伴有很大的幫助,感興趣的小伙伴快來(lái)一起學(xué)習(xí)吧2021-08-08java線程池:獲取運(yùn)行線程數(shù)并控制線程啟動(dòng)速度的方法
下面小編就為大家?guī)?lái)一篇java線程池:獲取運(yùn)行線程數(shù)并控制線程啟動(dòng)速度的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05Java設(shè)計(jì)模式中的策略模式詳細(xì)解析
這篇文章主要介紹了Java設(shè)計(jì)模式中的策略模式詳細(xì)解析,所謂策略模式,指的是做某一件事時(shí)有多種選擇(即策略),且不同的策略之間相互獨(dú)立,而且無(wú)論使用哪種策略,得到的結(jié)果都是相同的,需要的朋友可以參考下2023-12-12