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

相关文章

  • Java Spring boot日期和时间统一设置三种方法

    Java Spring boot日期和时间统一设置三种方法

    时间和日期的统一设置在项目中经常是会遇到的,下面这篇文章主要给大家介绍了关于Java Spring boot日期和时间统一设置的三种方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • java算法导论之FloydWarshall算法实现代码

    java算法导论之FloydWarshall算法实现代码

    这篇文章主要介绍了算法导论之FloydWarshall算法实现代码的相关资料,需要的朋友可以参考下
    2017-05-05
  • 关于maven全局配置文件settings.xml解析

    关于maven全局配置文件settings.xml解析

    这篇文章主要介绍了关于maven全局配置文件settings.xml,具有很好的参考价值,希望对大家有所帮助。
    2022-03-03
  • Java中CountDownLatch进行多线程同步详解及实例代码

    Java中CountDownLatch进行多线程同步详解及实例代码

    这篇文章主要介绍了Java中CountDownLatch进行多线程同步详解及实例代码的相关资料,需要的朋友可以参考下
    2017-03-03
  • SpringBoot中配置log4j2日志详解

    SpringBoot中配置log4j2日志详解

    这篇文章主要介绍了SpringBoot中配置log4j2日志详解,Apache Log4j2 是对原先的 Log4j 项目的升级版本,参考了 logback 的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,需要的朋友可以参考下
    2023-11-11
  • java通过Idea远程一键部署springboot到Docker详解

    java通过Idea远程一键部署springboot到Docker详解

    这篇文章主要介绍了java通过Idea远程一键部署springboot到Docker详解,Idea是Java开发利器,springboot是Java生态中最流行的微服务框架,docker是时下最火的容器技术,那么它们结合在一起会产生什么化学反应呢?的相关资料
    2019-06-06
  • 使用springboot防止反编译proguard+xjar

    使用springboot防止反编译proguard+xjar

    介绍了三种代码混淆和加密工具的使用方法:ProGuard、Xjar和ClassFinal,ProGuard用于混淆Java字节码,Xjar提供对JAR包内资源的加密和动态解密,而ClassFinal则支持直接加密JAR包或WAR包,通过预研和实际操作
    2024-11-11
  • Java利用Hutool-Script封装JS脚本执行

    Java利用Hutool-Script封装JS脚本执行

    在 Java 开发中,有时需要动态执行脚本代码,比如 JavaScript 脚本,来实现一些灵活的业务逻辑,下面我们就来看看如何利用Hutool-Script模块对Java的脚本执行功能进行封装吧
    2025-02-02
  • MyBatis使用接口映射的方法步骤

    MyBatis使用接口映射的方法步骤

    映射器是MyBatis中最核心的组件之一,本文主要介绍了MyBatis使用接口映射的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • Java实现提取不重复的整数实例

    Java实现提取不重复的整数实例

    这篇文章主要介绍了Java实现提取不重复的整数实例,具有一定借鉴价值,需要的朋友可以参考下
    2017-12-12

最新评论