1. 程式人生 > >mybatis - 延遲載入

mybatis - 延遲載入

延遲載入:使用到資料才發出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中指定的欄位的對映關係,所以不在需要指定欄位對映 可以同時指定一對多,多對一的延遲載入 使用方法 一對一 == 多對一 多對一 == 多對一 一對多 == 一對多 多對多 == 一對多(從兩端看)