resultMap中的association、collection支持延遲加載的功能
延遲加載:先從單表查詢,需要時再去關(guān)聯(lián)表查詢熟丸,大大提高數(shù)據(jù)庫性能
mapper.xml
需要定義兩個mapper方法對應(yīng)的statement
1.只查詢訂單信息
select * from orders
在查詢訂單的statement中石油association去延遲加載下面的statement
2.關(guān)聯(lián)查詢用戶信息
通過上面查詢到的訂單信息中的user_id去關(guān)聯(lián)查詢用戶
<resultMap type="cn.ztc.mybatis.po.Orders" id="OrdersUserLazyLoadingResultMap">
<<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
<!-- 實現(xiàn)對用戶信息延遲加載
select:指定延遲加載需要執(zhí)行的statement的id(根據(jù)user_id查詢用戶信息的statement)
column:訂單信息中關(guān)聯(lián)查詢用戶信息所要查詢的列刺洒,是user_id
關(guān)聯(lián)查詢的sql:
(SELECT username from user WHERE `user`.id=orders.user_id) username,
(SELECT sex from user WHERE `user`.id=orders.user_id) sex
-->
<association property="user" javaType="cn.ztc.mybatis.po.User" select="cn.ztc.mybatis.mapper.UserMapper.findUserById" column="user_id">
</association>
</resultMap>
<select id="findOrdersUserLazyLoading" resultMap="OrdersUserLazyLoadingResultMap">
select * from orders
</select>```
mapper.java
public List<Orders> findOrdersUserLazyLoading()throws Exception;```
測試思路:
1.執(zhí)行 findOrdersUserLazyLoading方法,只查詢訂單信息
2.在程序中遍歷上一步中查詢出的List<Orders>.當(dāng)我們調(diào)用Orders中的getUser方法時篙梢,開始進(jìn)行延遲加載
3.調(diào)用UserMapper.xml中的finduserById方法獲取用戶信息
在SqlMapConfig中配置延遲加載
<settings>
<!-- 打開延遲加載開關(guān) -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 設(shè)置積極加載為消極加載 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings> ```
使用延遲加載的方法顷帖,首先查詢簡單的sql(單表或關(guān)聯(lián)表)