Mybatis 懒加载

什么是懒加载#

  按需加载,先从单表查询,需要时再从关联表去关联查询,能大大提高数据库性能,并不是所有场景下使用懒加载都能提高性能

Mybatis懒加载:resultMap里面的association、collection都有延迟加载功能

全局配置文件

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

XXXXMapper.xml

复制代码
    <resultMap id="VideoOrderResultMapLazy" type="net.cybclass.online.domain.VideoOrder">
        <id column="id" property="id"></id>
        <result column="user_id" property="user_id"></result>
        <result column="out_trade_no" property="out_trade_no"></result>
        <result column="create_time" property="create_time"></result>
        <result column="state" property="state"></result>
        <result column="total_fee" property="total_fee"></result>
        <result column="video_id" property="video_id"></result>
        <result column="video_title" property="video_title"></result>
        <result column="video_img" property="video_img"></result>
        <!--
        select:指定延迟加载需要执行的statement id
        column:和select查询关联的字段
        -->
        <association property="user" javaType="net.cybclass.online.domain.User" column="user_id" select="findUserByUserId"/>
    </resultMap>
    <!--一对一关联查询订单,订单内容包含用户属性-->
    <select id="queryVideoOrderListLazy" resultMap="VideoOrderResultMapLazy">
        select
            v.id,
            v.out_trade_no,
            v.create_time,
            v.state,
            v.total_fee,
            v.video_id,
            v.video_title,
            v.user_id,
            v.video_img,
            u.name,
            u.pwd,
            u.phone,
            u.head_img,
            u.create_time create_time_u
        from video_order v left join user u on v.user_id=u.id
    </select>
    <select id="findUserByUserId" resultType="net.cybclass.online.domain.User">
        select * from user where id=#{id}
    </select>
复制代码

注:部分用户走了一级缓存SqlSession

posted @   陈彦斌  阅读(202)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2019-07-13 .Net高级编程-自定义错误页 web.config中<customErrors>节点配置
2019-07-13 .Net网站防盗链
2019-07-13 .Net捕获网站异常信息记录操作日志
主题色彩
点击右上角即可分享
微信分享提示