您好,登錄后才能下訂單哦!
mybatis怎么實現延遲加載?針對這個問題,今天小編總結這篇有關mybatis實現延遲加載的文章,可供感興趣的小伙伴們參考借鑒,希望對大家有所幫助。
mybatis的延遲加載就是按需查詢,在需要的時候進行查詢。
有兩張表:
圖書表(book):
圖書類型表(category):
他們之間通過類型id進行關聯,現在我要顯示圖書類型名,點擊類型名再顯示該類型下的所有圖書。
我們可以這樣做在類型實體類里面添加一個屬性存放該類型下的圖書
public class Category {
private int cid;
private String cname;
private List<Book> books;
//省略get set
}
一次性的把圖書類型和圖書查詢出來,Sql語句如下:
SELECT book.*,cname FROM book,category WHERE book.cid = category.cid
這樣做可以完成功能,但是我們只是需要顯示圖書類型,點擊的時候才顯示該類型的圖書,如果能做到開始只查詢類型,點擊類型的時候再查詢該類型的圖書,就不需要進行兩表聯查了,可以提高查詢的效率,也比較節省內存,這就是延遲加載。
延遲加載如何實現?
1. Category實體類同上
2. UserDao.xml:
<mapper namespace="cn.xh.dao.UserDao">
<select id="findCategoryWithLazingload" resultMap="categoryMap">
select * from category
</select>
<resultMap id="categoryMap" type="cn.xh.pojo.Category">
<id column="cid" property="cid"></id>
<result column="cname" property="cname"></result>
<collection property="books" column="cid" select="findBookWithLazy"></collection>
</resultMap>
<select id="findBookWithLazy" parameterType="int" resultType="cn.xh.pojo.Book">
select * from book where cid = #{cid}
</select>
</mapper>
只有我們點擊類型的時候才需要查詢該類型下的圖書,所以這里我們沒有用兩表聯查,而是將類型表的查詢語句和圖書表的查詢語句分開。
重點來看下這個配置:
<collection property="books" column="cid" select="findBookWithLazy"></collection>
collection,association是支持延遲加載的,這里的select屬性表示要執行的sql語句,column表示執行sql語句要傳的參數,該參數為select * from category查詢出來的字段cid,property=”books”表示查詢出來的結果給到books屬性。
關于mybatis實現延遲加載的方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。