MyBatis知識點複習-10懶加載講解
MyBatis懶加載是面試時常問的問題。何爲懶加載?就是在需要的時候纔去加載,在mybatis中<resultMap>下的<collection>和<association>具有延時加載的功能。溫馨提示:本文的內容比較輕鬆。
上一篇:MyBatis知識點複習-09多表操作講解
要想使用懶加載,需要在全局配置文件裏面聲明可以使用:
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
然後在OrdersMapper接口中添加下面函數:
public Orders findByLazyLoading(String number);
接着在UserMapper接口裏面添加下面函數:
public User findUserById(int user_id);
然後再UserMapper.xml添加下面內容(爲懶加載服務):
<select id="findUserById" parameterType="int" resultMap="abcdef">
select * from user where #{user_id}=id
</select>
上面的abcdef是我前面文章已經配置好的一個resultMap
然後再OrdersMapper.xml添加下面內容:
<resultMap id="LazyLoading" type="orders">
<id column="id" property="id"></id>
<result column="cretetime" property="creattime"></result>
<!--懶加載模式-->
<association property="user" javaType="user"
select="mapper.UserMapper.findUserById" column="user_id">
</association>
</resultMap>
<select id="findByLazyLoading" parameterType="String" resultMap="LazyLoading">
select * from user u,orders o where o.user_id = u.id and number = #{number}
</select>
說明:在<association>的配置裏面,我們沒有采用前面章節的使用它的子標籤來配置字段,而是使用了UserMapper.xml裏面實現的一個方法findUserById,通過在column屬性裏面字段值(這裏是user_id)作爲該函數的參數,藉由這個配置好的方法的返回值作爲orders的屬性user的值。
在Test方法裏面測試:
OrdersMapper mapper = sqlSession.getMapper(OrdersMapper.class);
Orders byLazyLoading = mapper.findByLazyLoading("1000010");
System.out.println(byLazyLoading);
sqlSession.commit();//提交事務,否則會事務回滾
到這裏我麼已經明白懶加載就是使用其他的已經實現的方法來封裝對象而不是自己在<association>或者<collection>的子標籤裏面配置。本文開頭說了<collection>標籤也有懶加載的功能,這裏留給讀者自己實現。
上一篇:MyBatis知識點複習-09多表操作講解
下一篇:MyBatis知識點複習-11一級緩存與二級緩存