【MyBatis】6、延迟加载

延迟加载

什么是延迟加载?

延迟加载也叫懒加载、惰性加载,使用延迟加载可以提高程序的运行效率。

它是针对于数据持久层的操作,在某些特定的情况下去访问特定的数据库,在其他情况下可以不访问某些表,从一定程度上减少了Java应用与数据库的交互次数。

例如在查询学生和班级的时,学生和班级是两张不同的表,如果当前的需求只需要获取学生的信息,那么查询学生单表即可,如果需要通过学生获取对应的班级信息,则必须查询两张表。

不同的业务需求,需要查询不同的表,根据具体的业务需求来动态减少数据表查询的工作就是延迟加载。

使用延迟加载
  1. 在 config.xml 中开启延迟加载

    <settings>
        <!-- 打印sql -->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <!-- 开启延迟加载 -->
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>
    
  2. 将多表关联查询拆分成多个单表查询

    接口文件 StudentRepository.java 中加入方法

    public Student findByIdLazy(long id);
    

    在StudentRepository.xml 中的 mapper 标签下添加

    <select id="findByIdLazy" parameterType="long" resultMap="studentMapLazy">
        SELECT * FROM student where id = #{id}
    </select>
    
    <resultMap id="studentMapLazy" type="com.mybatistest.entity.Student">
        <id column="id" property="id"></id>
        <result column="name" property="name"></result>
        <association property="classes" javaType="com.mybatistest.entity.Classes" 
                     select="com.mybatistest.repository.ClassesRepository.findByIdLazy" column="cid"></association>
    </resultMap>
    

    接口文件 ClassesRepository.java 中加入方法

    public Classes findByIdLazy(long id);
    

    在ClassesRepository.xml 中的 mapper 标签下添加

    <select id="findByIdLazy" parameterType="long" resultType="com.mybatistest.entity.Classes">
        SELECT * from classes where id = #{id}
    </select>
    
  3. 自此可实现延迟加载,此后,查询学生班级的信息会先后查询两张表,而查询学生姓名只会查询一张表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值