您好,登錄后才能下訂單哦!
mybatis怎么實(shí)現(xiàn)延遲加載?針對這個(gè)問題,今天小編總結(jié)這篇有關(guān)mybatis實(shí)現(xiàn)延遲加載的文章,可供感興趣的小伙伴們參考借鑒,希望對大家有所幫助。
mybatis的延遲加載就是按需查詢,在需要的時(shí)候進(jìn)行查詢。
有兩張表:
圖書表(book):
圖書類型表(category):
他們之間通過類型id進(jìn)行關(guān)聯(lián),現(xiàn)在我要顯示圖書類型名,點(diǎn)擊類型名再顯示該類型下的所有圖書。
我們可以這樣做在類型實(shí)體類里面添加一個(gè)屬性存放該類型下的圖書
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
這樣做可以完成功能,但是我們只是需要顯示圖書類型,點(diǎn)擊的時(shí)候才顯示該類型的圖書,如果能做到開始只查詢類型,點(diǎn)擊類型的時(shí)候再查詢該類型的圖書,就不需要進(jìn)行兩表聯(lián)查了,可以提高查詢的效率,也比較節(jié)省內(nèi)存,這就是延遲加載。
延遲加載如何實(shí)現(xiàn)?
1. Category實(shí)體類同上
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>
只有我們點(diǎn)擊類型的時(shí)候才需要查詢該類型下的圖書,所以這里我們沒有用兩表聯(lián)查,而是將類型表的查詢語句和圖書表的查詢語句分開。
重點(diǎn)來看下這個(gè)配置:
<collection property="books" column="cid" select="findBookWithLazy"></collection>
collection,association是支持延遲加載的,這里的select屬性表示要執(zhí)行的sql語句,column表示執(zhí)行sql語句要傳的參數(shù),該參數(shù)為select * from category查詢出來的字段cid,property=”books”表示查詢出來的結(jié)果給到books屬性。
關(guān)于mybatis實(shí)現(xiàn)延遲加載的方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。