Mybatis中的延遲加載詳細(xì)解析
一、什么叫延遲加載、立即加載
1.什么是延遲加載 在真正需要使用數(shù)據(jù)時(shí)才發(fā)起查詢,不用的時(shí)候不進(jìn)行查詢。按需加載(懶加載)
2. 什么是立即加載 不管用不用,只要一調(diào)用方法,馬上發(fā)起查詢。
二、Mybatis中的延遲加載
需求: 在一對(duì)多中,當(dāng)我們有一個(gè)用戶,它有10個(gè)角色。 在查詢用戶時(shí),用戶下的角色信息應(yīng)該是,什么時(shí)候使用,什么時(shí)候查詢的。
在查詢角色時(shí),賬戶的所屬用戶信息應(yīng)該是隨著賬戶查詢時(shí)一起查詢出來。
在對(duì)應(yīng)的四種表關(guān)系中: 一對(duì)多,多對(duì)一,一對(duì)一,多對(duì)多 一 對(duì)多,多對(duì)多:通常情況下我們都是采用延遲加載。
多對(duì)一,一對(duì)一:通常情況下我們都是采用立即加載。
一對(duì)一延遲加載
例:以用戶和賬戶關(guān)系為例,查詢一個(gè)賬戶時(shí)顯示當(dāng)前賬戶的所屬用戶 查詢方法
1.dao層接口
public interface IAccountDao {
/**
* 查詢所有賬戶,同時(shí)還要獲取到當(dāng)前賬戶的所屬用戶信息
* @return
*/
List<Account> findAll();
}2.映射文件:
<resultMap id="accountUserMap" type="account">
<id property="id" column="id"></id>
<result property="uid" column="uid"></result>
<result property="money" column="money"></result>
<!-- 一對(duì)一的關(guān)系映射:配置封裝user的內(nèi)容
select屬性制定的內(nèi)容:查詢用戶的唯一標(biāo)識(shí)
column屬性指定的內(nèi)容:用戶根據(jù)id時(shí),所需要的參數(shù)值的值-->
<association property="user" column="uid" javaType="user" select="com.rpf.dao.IUserDao.findById"></association>
</resultMap>
<!-- 查詢所有 -->
<select id="findAll" resultMap="accountUserMap">
select * from account
</select>3.Mybatis主配置文件配置開啟懶加載
<!--加入settings-->
<settings>
<!--開啟Mybatis支持延遲加載-->
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"></setting>
</settings>4.測(cè)試
@Test
public void testFindAll(){
List<Account> accounts = accountDao.findAll();
}
效果圖 沒開啟延遲加載之前執(zhí)行了三條

開啟了延遲加載后 執(zhí)行了一條語(yǔ)句

一對(duì)多實(shí)現(xiàn)延遲加載
1. dao層接口 List findAll();
2.映射文件
//user
<resultMap id="userAccountMap" type="user">
<id property="id" column="id"></id>
<result property="username" column="username"></result>
<result property="address" column="address"></result>
<result property="sex" column="sex"></result>
<result property="birthday" column="birthday"></result>
<!-- 配置user對(duì)象中accounts集合的映射 -->
<collection property="accounts" ofType="account" select="com.rpf.dao.AccountDao.findAccountByUid" column="id"></collection>
</resultMap>
<!-- 查詢所有 -->
<select id="findAll" resultMap="userAccountMap">
select * from user
</select>
<!-- 根據(jù)id查詢用戶 -->
<select id="findById" parameterType="INT" resultType="user">
select * from user where id = #{uid}
</select><!-- 根據(jù)用戶id查詢賬戶列表 account -->
<select id="findAccountByUid" resultType="account">
select * from account where uid=#{uid}
</select>3.測(cè)試類:
@Test
public void testFindAll(){
List<User> users = userDao.findAll();
}只查詢了用戶并沒有查用戶下賬戶的信息

到此這篇關(guān)于Mybatis中的延遲加載詳細(xì)解析的文章就介紹到這了,更多相關(guān)Mybatis延遲加載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java設(shè)計(jì)模式中的策略模式詳細(xì)解析
這篇文章主要介紹了Java設(shè)計(jì)模式中的策略模式詳細(xì)解析,所謂策略模式,指的是做某一件事時(shí)有多種選擇(即策略),且不同的策略之間相互獨(dú)立,而且無論使用哪種策略,得到的結(jié)果都是相同的,需要的朋友可以參考下2023-12-12
實(shí)例化JFileChooser對(duì)象報(bào)空指針異常問題的解決辦法
今天小編就為大家分享一篇關(guān)于實(shí)例化JFileChooser對(duì)象報(bào)空指針異常問題的解決辦法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02
詳解Spring AOP 實(shí)現(xiàn)“切面式”valid校驗(yàn)
本篇文章主要介紹了詳解Spring AOP 實(shí)現(xiàn)“切面式”valid校驗(yàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01
Java實(shí)現(xiàn)樹形結(jié)構(gòu)的示例代碼
由于業(yè)務(wù)需要,后端需要返回一個(gè)樹型結(jié)構(gòu)給前端,包含父子節(jié)點(diǎn)的數(shù)據(jù)已經(jīng)在數(shù)據(jù)庫(kù)中存儲(chǔ)好。本文將為大家分享Java現(xiàn)樹形結(jié)構(gòu)的示例代碼,需要的可以參考下2022-05-05
SpringSecurity實(shí)現(xiàn)多種身份驗(yàn)證方式
本文主要介紹了SpringSecurity實(shí)現(xiàn)多種身份驗(yàn)證方式,包括表單的認(rèn)證、HTTP基本認(rèn)證、HTTP摘要認(rèn)證、證書認(rèn)證、OpenIDConnect或OAuth2.0的認(rèn)證、記住我功能和LDAP認(rèn)證,感興趣的可以了解一下2025-03-03

