1. 程式人生 > >Mybatis---resultMap的延遲載入 (懶載入)

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 語句,當我們呼叫資料時才會查詢資料庫。