mybatis - 延遲載入
阿新 • • 發佈:2018-11-19
延遲載入:使用到資料才發出sql查詢
sqlMapConfig.xml 配置檔案中
<settings>
<!-- 延遲載入的總開關-->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- aggressiveLazyLoading 設定成false才是啟用延遲載入 -->
<setting name="aggressiveLazyLoading" value="false"/>
<!-- 開啟二級快取,在mybatis中只要快取的配置都指的是二級快取 -->
<setting name="cacheEnabled" value="true"/>
</settings>
對應的對映檔案中
<!-- ======================== 一對多的延遲載入 =========================== -->
<resultMap type="person" id="selectPersonByIdLazyRM" extends="BaseResultMap">
<!-- column:把 外來鍵id傳送子sql 主sql查詢出來的結果中的某一列作為子sql的引數
select:子sql的位置 -->
<collection property="orderList" column="person_id" select="com.rl.mapper.OrdersMapper.selectOrdersByPersonIdLazy"></collection>
</resultMap>
主sql 主對映檔案中,
<select id="selectPersonByIdLazy" parameterType="int" resultMap="selectPersonByIdLazyRM">
select * from person t where t.person_id = #{personId}
</select >
子sql(可以在另外一個對映檔案中)
要通過主sql返回的值來查詢的對映檔案中<select id="selectOrdersByPersonIdLazy" parameterType="int" resultMap="selectPersonByIdLazyRM">
select * from person t where t.person_id = #{personId}
</select>
<!-- ======================== 多對一的延遲載入 =========================== -->
和一對多大同小異,把 collection 換成 association
子sql中指定的欄位的對映關係,所以不在需要指定欄位對映
可以同時指定一對多,多對一的延遲載入
使用方法
一對一 == 多對一
多對一 == 多對一
一對多 == 一對多
多對多 == 一對多(從兩端看)