日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

mybatis懶加載原理 mybatis懶加載和延遲加載

延遲加載又叫懶加載,也叫按需加載 。也就是說先加載主信息,在需要的時候,再去加載從信息 。
在mybatis中,resultMap標簽 的association標簽和collection標簽具有延遲加載的功能 。
1、拷貝jar包
延遲加載中查詢出來的是一個代理對象,不是真正的對象本身,可參考hibernate中的load方法,利用log4j將日志信息打印在控制臺可以很明確的看到,所以在使用延遲加載時,需要用到cglib包 。
<dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.2.6</version></dependency>2、配置全局設置
<!– 全局設置 –>
<settings>
<!-- 打開延遲加載的開關,默認為false,即非延遲加載 --> <setting name="lazyLoadingEnabled" value="https://www.jinnalai.com/fenxiang/true"/> <!-- 將積極加載改為消極加載 --> <setting name="aggressiveLazyLoading" value="https://www.jinnalai.com/fenxiang/true"/> <!--兩個合在一起配置就是,消極的延遲加載--></settings>
官方對這兩個屬性的解釋是:
lazyLoadingEnabled 全局啟用或禁用延遲加載 。當禁用時,所有關聯(lián)對象都會即時加載 。(是否延遲加載當前對象的關聯(lián)對象)
aggressiveLazyLoading 當啟用時,有延遲加載屬性的對象在被調用時將會完全加載任意屬性 。否則,每種屬性將會按需要加載 。(是否延遲加載當前對象屬性的關聯(lián)對象)
延遲加載會生成代理對象
3、測試
/**
* 測試延遲加載
*/
@Testpublic void testLazyLoading(){ SqlSession session = MyBatisUtil.getSqlSession(); BlogMapper blogImpl = session.getMapper(BlogMapper.class); Blog blog = blogImpl.selectById(1); session.close();//默認是積極加載的,需要在Config配置文件的全局中配置 System.out.println(blog.getId());//System.out.println(blog.getAuthor());}
根據(jù)MyBatis官方文檔中給出的案例,Blog類中關聯(lián)了Author,此次測試,基于官方文檔中的案例
(1)什么都不配置,且只打印blog的id

mybatis懶加載原理 mybatis懶加載和延遲加載


可以看出,當什么都不配置時,默認為用一個從連接池中取得的連接完成兩個sql語句的查詢,即非延遲,積極的查詢
(2)配置 <setting name=”lazyLoadingEnabled” value=https://www.jinnalai.com/fenxiang/”true” />
aggressiveLazyLoading的默認值為false 即只配 lazyLoadingEnabled為true或者同時配置兩個為一true一false的結果相同 只要結果映射中配置了association
則執(zhí)行懶加載特性:不查詢author的屬性,則不執(zhí)行子查詢 。
當只有測試中的第一條輸出語句執(zhí)行時結果如下圖:

mybatis懶加載原理 mybatis懶加載和延遲加載


可以看到此時是懶加載 。
當測試中的兩條輸出語句都執(zhí)行時結果如下圖:

mybatis懶加載原理 mybatis懶加載和延遲加載


可以看出,此時為非積極的延遲加載,只有在需要查詢author時才會執(zhí)行查詢author的sql語句 。
(2)配置 <setting name=”lazyLoadingEnabled” value=https://www.jinnalai.com/fenxiang/”true” />且
<setting name="aggressiveLazyLoading" value="https://www.jinnalai.com/fenxiang/true"/> 此時為積極的延遲加載當只有測試中的第一條輸出語句執(zhí)行時結果如下圖:

mybatis懶加載原理 mybatis懶加載和延遲加載


可以看出,此時的結果為雖然只需要blog的id,但是author依舊被查詢,而且用到的是兩個連接查詢 。
當測試中的兩條輸出語句都執(zhí)行時結果如下圖:

推薦閱讀