您的位置:首页 > 其它

MyBatis使用Collection查询多对多集合

2016-03-10 15:59 429 查看
现在有三个对象分别定义如下:
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标签,结果没有写出来,在业务中进行了数据的处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息