Boogie

生如逆旅单行道,哪有岁月可回头。GitHub:https://github.com/1063750024

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 语句,当我们调用数据时才会查询数据库。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38070608/article/details/80353271
文章标签: association
个人分类: JavaEE
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭