1.遇到的坑===》分页插件查询COUNT(1)和LIMIT ?,? 都正确,但返回数据错误
问题回溯:
1.1创建多表数据对应VO
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ArticleVO {
private Article article;
private String tName;
private User user;
}
1.2XML
<resultMap id="ArticleVOMap" type="com.dxf.userservice.entity.vo.ArticleVO">
<result column="t_name" property="tName" />
<association property="article" javaType="com.dxf.userservice.entity.Article">
<id column="a_id" property="aId" />
<result column="a_title" property="aTitle" />
<result column="a_cont" property="aCont" />
<result column="a_html" property="aHtml" />
<result column="a_good" property="aGood" />
<result column="a_look" property="aLook" />
<result column="t_id" property="tId" />
<result column="u_id" property="uId" />
<result column="a_time" property="aTime" />
</association>
<association property="user" javaType="com.dxf.userservice.entity.User">
<id column="u_id" property="uId" />
<result column="username" property="username" />
<result column="password" property="password" />
<result column="nick_name" property="nickName" />
<result column="sex" property="sex" />
<result column="school" property="school" />
<result column="img" property="img" />
<result column="date" property="date" />
<result column="login" property="login" />
<result column="openid" property="openid" />
</association>
</resultMap>
<sql id="columns">
a.a_id,a.a_title,a.a_cont,a.a_good,a.a_look,a.a_time,a.t_id,t.t_name,u.u_id,u.nick_name,u.img
</sql>
<select id="selectArticleVOListPage" resultMap="ArticleVOMap">
select
<include refid="columns" />
from article a,user u,type t
<where>
a.u_id=u.u_id and a.t_id=t.t_id
<if test="uid!='' and uid!=null">
and u.u_id = #{uid}
</if>
<if test="tid!='' and tid!=null">
and t.t_id = #{tid}
</if>
<if test="title!='' and title!=null">
and a.a_title like concat('%', #{title}, '%')
</if>
</where>
order by a.a_look DESC
</select>
1.3mapper
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
public interface ArticleMapper extends BaseMapper<Article> {
Page<ArticleVO> selectArticleVOListPage(Page pagination,
@Param("uid") String uid,
@Param("tid") String tid,
@Param("title") String title);
}
1.4使用
public ResultJson getHomeData() {
Page<ArticleVO> page=new Page<>(1,8);
return ResultJson.ok().data("data",
baseMapper.selectArticleVOListPage(page,"","",""));
}
Page page=new Page<>(1,8);
查询的总量和对应的分页数据都是正确地,但是返回的数据却一直不对,没有8条那么多。
为此我找了很多资料,浪费了一个下午的时间,才发现返回的数据有一个特殊地方!他们的tName没有重复的,但是对象类型里却有重复的数据,我猜想MyBatisPlus在存值的时候把string类型tName相同的值覆盖了(或者丢弃),于是我试着把tName直接使用对象存。
public class ArticleVO {
private Article article;
private Type type;
private User user;
}
<resultMap id="ArticleVOMap" type="com.dxf.userservice.entity.vo.ArticleVO">
<association property="type" javaType="com.dxf.userservice.entity.Type">
<id column="t_id" property="tId" />
<result column="t_name" property="tName" />
</association>
<association property="article" javaType="com.dxf.userservice.entity.Article">
<id column="a_id" property="aId" />
<result column="a_title" property="aTitle" />
<result column="a_cont" property="aCont" />
<result column="a_html" property="aHtml" />
<result column="a_good" property="aGood" />
<result column="a_look" property="aLook" />
<result column="t_id" property="tId" />
<result column="u_id" property="uId" />
<result column="a_time" property="aTime" />
</association>
<association property="user" javaType="com.dxf.userservice.entity.User">
<id column="u_id" property="uId" />
<result column="username" property="username" />
<result column="password" property="password" />
<result column="nick_name" property="nickName" />
<result column="sex" property="sex" />
<result column="school" property="school" />
<result column="img" property="img" />
<result column="date" property="date" />
<result column="login" property="login" />
<result column="openid" property="openid" />
</association>
</resultMap>
2.结果
如我所猜想的MyBatisPlus在存值的时候把string类型tName相同的值覆盖了(或者丢弃)导致最后的数据有问题,修改过后返回的数据就正确了。