Mybatis中的延遲加載詳細解析
一、什么叫延遲加載、立即加載
1.什么是延遲加載 在真正需要使用數據時才發(fā)起查詢,不用的時候不進行查詢。按需加載(懶加載)
2. 什么是立即加載 不管用不用,只要一調用方法,馬上發(fā)起查詢。
二、Mybatis中的延遲加載
需求: 在一對多中,當我們有一個用戶,它有10個角色。 在查詢用戶時,用戶下的角色信息應該是,什么時候使用,什么時候查詢的。
在查詢角色時,賬戶的所屬用戶信息應該是隨著賬戶查詢時一起查詢出來。
在對應的四種表關系中: 一對多,多對一,一對一,多對多 一 對多,多對多:通常情況下我們都是采用延遲加載。
多對一,一對一:通常情況下我們都是采用立即加載。
一對一延遲加載
例:以用戶和賬戶關系為例,查詢一個賬戶時顯示當前賬戶的所屬用戶 查詢方法
1.dao層接口
public interface IAccountDao { /** * 查詢所有賬戶,同時還要獲取到當前賬戶的所屬用戶信息 * @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> <!-- 一對一的關系映射:配置封裝user的內容 select屬性制定的內容:查詢用戶的唯一標識 column屬性指定的內容:用戶根據id時,所需要的參數值的值--> <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.測試
@Test public void testFindAll(){ List<Account> accounts = accountDao.findAll(); }
效果圖 沒開啟延遲加載之前執(zhí)行了三條
開啟了延遲加載后 執(zhí)行了一條語句
一對多實現延遲加載
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對象中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> <!-- 根據id查詢用戶 --> <select id="findById" parameterType="INT" resultType="user"> select * from user where id = #{uid} </select>
<!-- 根據用戶id查詢賬戶列表 account --> <select id="findAccountByUid" resultType="account"> select * from account where uid=#{uid} </select>
3.測試類:
@Test public void testFindAll(){ List<User> users = userDao.findAll(); }
只查詢了用戶并沒有查用戶下賬戶的信息
到此這篇關于Mybatis中的延遲加載詳細解析的文章就介紹到這了,更多相關Mybatis延遲加載內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java?Spring?boot日期和時間統(tǒng)一設置三種方法
時間和日期的統(tǒng)一設置在項目中經常是會遇到的,下面這篇文章主要給大家介紹了關于Java?Spring?boot日期和時間統(tǒng)一設置的三種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-08-08Java中CountDownLatch進行多線程同步詳解及實例代碼
這篇文章主要介紹了Java中CountDownLatch進行多線程同步詳解及實例代碼的相關資料,需要的朋友可以參考下2017-03-03java通過Idea遠程一鍵部署springboot到Docker詳解
這篇文章主要介紹了java通過Idea遠程一鍵部署springboot到Docker詳解,Idea是Java開發(fā)利器,springboot是Java生態(tài)中最流行的微服務框架,docker是時下最火的容器技術,那么它們結合在一起會產生什么化學反應呢?的相關資料2019-06-06使用springboot防止反編譯proguard+xjar
介紹了三種代碼混淆和加密工具的使用方法:ProGuard、Xjar和ClassFinal,ProGuard用于混淆Java字節(jié)碼,Xjar提供對JAR包內資源的加密和動態(tài)解密,而ClassFinal則支持直接加密JAR包或WAR包,通過預研和實際操作2024-11-11Java利用Hutool-Script封裝JS腳本執(zhí)行
在?Java?開發(fā)中,有時需要動態(tài)執(zhí)行腳本代碼,比如?JavaScript?腳本,來實現一些靈活的業(yè)務邏輯,下面我們就來看看如何利用Hutool-Script模塊對Java的腳本執(zhí)行功能進行封裝吧2025-02-02