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标签,结果没有写出来,在业务中进行了数据的处理。

你可能感兴趣的:(mybatis,Collection,resultMap)