Mybatis3.x的懒加载

什么是懒加载: 按需加载,先从单表查询,需要时再从关联表去关联查询,能大大提高数据库性
能,并不是所有场景下使用懒加载都能提高 效率
Mybatis懒加载: resultMap里面的association、collection有延迟加载功能

全局参数设置:
mybatis-config.xml

 <!--延迟加载总开关-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--将aggressiveLazyLoading设置为false表示按需加载,默认为true-->
        <setting name="aggressiveLazyLoading" value="false"/>

在这里插入图片描述

VideoOrderMapper.xml

 <resultMap id="VideoOrderResultMapLazy" type="VideoOrder">
        <id column="id" property="id"/>
        <result column="user_id" property="userId"/>
        <result column="out_trade_no" property="outTradeNo"/>
        <result column="create_time" property="createTime"/>
        <result column="total_fee" property="totalFee"/>
        <result column="video_id" property="videoId"/>
        <result column="video_title" property="videoTitle"/>
        <result column="video_img" property="videoImg"/>

        <!--Video 中 private User user;-->
        <association property="user" javaType="User" select="findUserByUserId" column="user_id"/>

    </resultMap>

    <!--一对一管理查询订单,订单内部包含用户属性 懒加载-->
    <select id="queryVideoOrderListLazy" resultMap="VideoOrderResultMapLazy">
        select
        o.id,
        o.user_id,
        o.out_trade_no,
        o.create_time,
        o.total_fee,
        o.video_id,
        o.video_title,
        o.video_img
        from video_order o
    </select>

    <select id="findUserByUserId" resultType="User">
        select * from user where id = #{id,jdbcType=INTEGER}
    </select>

VideoOrderMapper.java

public interface VideoOrderMapper {
    /**
     * 查询全部订单,关联用户 懒加载
     * @return
     */
    List<VideoOrder> queryVideoOrderListLazy();
}

测试代码:

public class SqlSessionDemo {
    public static void main(String [] args) throws IOException {

        //读取配置文件
        String resouce="config/mybatis-config.xml";
        InputStream inputStream= Resources.getResourceAsStream(resouce);

        //构建Session工厂
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
        //获取Session
        try(SqlSession sqlSession=sqlSessionFactory.openSession()){

            VideoOrderMapper videoOrderMapper=sqlSession.getMapper(VideoOrderMapper.class);
            
			List<VideoOrder> list1=videoOrderMapper.queryVideoOrderListLazy();
            System.out.println(list1.size());
            for (VideoOrder videoOrder:list1){
               // System.out.println(videoOrder.getVideoTitle());
                System.out.println(videoOrder.getUser());
            }
        }
    }
}

效果截图:
请求到需要user信息的时候
在这里插入图片描述
请求不需要user信息的时候
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值