Mybatis---resultMap的延迟加载 (懒加载)

延迟加载

resultMap 的数据以 树状结构 为主,当我们用到分支数据的时候再查下,反之则,不查询,这样可以节省数据库资源。

在代码中可以更详细一些。

    <settings><!--  -->
        <!-- 懒加载设置为 true -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- 积极加载设置为false -->
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>

Mybatis的配置文件规定setting配置顺序得在properties节点下。
association 和collection 就具有懒加载特性
在Mapper配置文件中配置如下:

<mapper namespace="com.zll.mybatis.dao.OrderDaoLazy">
    <resultMap type="com.zll.mybatis.bean.Orders" id="findOrderDetailMap">
        <id column="id" property="id" />
        <result column="createTime" property="createTime" />
        <result column="userId" property="userId" />

        <association property="user" javaType="com.zll.mybatis.bean.User"
            column="id" select="findUser" />
        <collection property="orderItems" ofType="com.zll.mybatis.bean.OrderItem"
            column="id" select="findOrdersItem" />
    </resultMap>

    <select id="findOrderDetailLazy" resultMap="findOrderDetailMap">
        select * from orders
    </select>


    <select id="findUser" parameterType="int" resultType="com.zll.mybatis.bean.User">
        select *
        from user where id = #{id}
    </select>

    <select id="findOrdersItem" parameterType="int" resultType="com.zll.mybatis.bean.OrderItem">
        select * from orderItem where orderId = #{id}
    </select>
</mapper>

注意:由于是懒加载是分开查询,所以我们的每个select 映射也需要分开写。
这里需要注意的就是 association 和 collection 标签中的 column 和select属性
select: 填写 我们要调用的 select 映射的 id
column : 填写 我们要传递给 select 映射的 参数。

测试时只要输出list对象中的order的id。读取了User 和 OrderItem对象,出发了懒加载,所以你会看到控制台打印了3次 select 语句,当我们调用数据时才会查询数据库。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值