MyBatis使用Collection查詢多對多集合

現在有三個對象分別定義如下:

class Photo {
private String photoid;
private String photoname;
private String phototime;
private UserInfo user;
private PType ptype;
private int likenum;
private String photoremake;
}
 UserInfo {
private int userid;
private String userno;
private String userpwd;
private String username;
private String email;
private String birthday;
}
 class LikeInfo {
private int userid;
private List<Photo> photos;
}

 Mapper接口中定義的方法:


/**
 * 收藏圖片
 * @return
 */
public int saveLikeInfo(String photoid,int userid);
/**
 * 查詢個人收藏空間
 * @param userid
 * @return
 */
public LikeInfo getLikeInfoByUserId(int userid);
/**
 * 分頁查詢所有收藏記錄
 * @param userid
 * @return
 */
public List<LikeInfo> getLikeInfo(int index);

對應的配置文件xml:

首先定義一個resultMap:

<resultMap id="likeMapper" type="LikeInfo">
    <result property="userid" column="userid" />
<collection  property="photos"   javaType="java.util.List" ofType="Photo">
<id property="photoid" column="photoid" />
<result property="photourl" column="photourl" />
<result property="photoname" column="photoname" />
<result property="likenum" column="likenum" />
<result property="photoremake" column="photoremake" />
</collection >
</resultMap>

在這個resultMap中使用了collection標籤,代表這裏封裝的是一個集合。

 SQL語句如下:


 

<select id="getLikeInfoByUserId" parameterType="int"  resultMap="likeMapper">
    select l.*,p.photoname,p.photoremake,p.likenum from tb_likes l,tb_photos p where l.photoid=p.photoid and  l.userid=#{userid}
    </select>
<select id="getLikeInfo" resultMap="likeMapper">
     select l.*,p.* from tb_likes l,tb_photos p where l.photoid=p.photoid  limit #{index},20    
    </select>
<insert id="saveLikeInfo" parameterType="LikeInfo">
   insert into tb_likes 
   <trim prefix="(" suffix=")" suffixOverrides="," > 
   userid, photoid
   </trim>
   <trim prefix="values (" suffix=")" suffixOverrides="," >     
   #{1},#{0}
   </trim>
</insert>

在執行插入語句時,一開始傳進來的是一個likeInfo的對象,準備使用forEach標籤,結果沒有寫出來,在業務中進行了數據的處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章