Mybatis中的延迟加载详细解析

 更新时间:2023年12月21日 11:02:56   作者:暴躁的程序猿啊  
这篇文章主要介绍了Mybatis中的延迟加载详细解析,延迟加载就是在真正需要使用数据时才发起查询,不用的时候不进行查询,按需加载(懒加载),需要的朋友可以参考下

一、什么叫延迟加载、立即加载

1.什么是延迟加载 在真正需要使用数据时才发起查询,不用的时候不进行查询。按需加载(懒加载)

2. 什么是立即加载 不管用不用,只要一调用方法,马上发起查询。

二、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();
    }

效果图 没开启延迟加载之前执行了三条

在这里插入图片描述

开启了延迟加载后 执行了一条语句

在这里插入图片描述

一对多实现延迟加载

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延迟加载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java8中的lambda表达式入门教程

    Java8中的lambda表达式入门教程

    lambda表达式,即带有参数的表达式,为了更清晰地理解lambda表达式,下面通过示例代码给大家介绍java8 lambda 表达式入门教程,感兴趣的朋友一起看看吧
    2017-08-08
  • Java8中的Lambda表达式理解与使用示例详解

    Java8中的Lambda表达式理解与使用示例详解

    Lambda表达式是Java8引入的一种简洁写法,用于实现函数式接口,可以简化匿名函数的代码,本文给大家介绍Java8中的Lambda表达式理解与使用示例,感兴趣的朋友一起看看吧
    2024-11-11
  • JustAuth整合第三方登录组件样例

    JustAuth整合第三方登录组件样例

    这篇文章主要为大家介绍了JustAuth整合第三方登录组件样例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Spring Boot集成Elasticsearch全过程

    Spring Boot集成Elasticsearch全过程

    这篇文章主要介绍了Spring Boot集成Elasticsearch全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • Idea实现接口的方法上无法添加@Override注解的解决方案

    Idea实现接口的方法上无法添加@Override注解的解决方案

    文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Language level到支持该注解的版本,以及在pom.xml文件中指定maven-compiler-plugin的版本以解决自动更新后的问题
    2025-02-02
  • Maven优雅的添加第三方Jar包的方法

    Maven优雅的添加第三方Jar包的方法

    下面小编就为大家带来一篇Maven优雅的添加第三方Jar包的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Mybatis分步查询的实现示例

    Mybatis分步查询的实现示例

    本文主要介绍了Mybatis分步查询的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Springboot如何通过filter修改Header的值

    Springboot如何通过filter修改Header的值

    这篇文章主要介绍了Springboot如何通过filter修改Header的值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • SpringBoot多环境开发与日志小结

    SpringBoot多环境开发与日志小结

    这篇文章主要介绍了SpringBoot多环境开发与日志,下面给大家说一下如何基于多环境开发做配置独立管理,务必掌握,需要的朋友可以参考下
    2022-08-08
  • Java IO和NIO的基本概念和API详解

    Java IO和NIO的基本概念和API详解

    JavaIO是基于流的阻塞式I/O,适用于低并发场景;JavaNIO是基于通道和缓冲区的非阻塞式I/O,适用于高并发场景
    2025-03-03

最新评论