一、记录使用PageHelper时,使用Example添加排序失效问题
问题描述:
当使用PageHelper.startPage(pageNum,pageSize);之前,进行查询条件的构建,
MemberGiftCardExample giftCardExample = new MemberGiftCardExample();
giftCardExample.setOrderByClause("mgc_create_time DESC");
MemberGiftCardExample.Criteria criteria = giftCardExample.createCriteria();
if (!StringUtils.isEmpty(dto.getCode())) {
String likeCode = "%" + dto.getCode() + "%";
criteria.andMgcCodeLike(likeCode);
}
..................................省略
执行查询操作后,返回数据并没有进行排序。
解决方法:
可以在这PageHelper.startPage里面,加一个排序条件PageHelper.startPage(pageNum,pageSize,排序条件);
第一种:之前在example里面设置了order by 所以可以直接获取
PageHelper.startPage(pageNum,pageSize,giftCardExample.getOrderByClause());
第二种:直接将排序条件写到第三个参数里
PageHelper.startPage(pageNum , pageSize);PageHelper.orderBy("A B");
其中A为排序依据的字段名,B为排序规律,desc为降序,asc为升序
或者一步到位
String orderBy="字段名(数据库字段名) 排序规律";
PageHelper.startPage(pageNum, pageSize, orderBy);
二、使用PageHelper进行分页时,出现分页数据重复问题
原因:
pageHelper进行分页时,如果排序字段不唯一或者可能为空,那么就可能出现查询结果在不同页中有重复的数据,部分数据也因此查询不出来。这个bug似乎不一定百分百的出现,但是出现的概率非常的大。
解决办法:
如果要排序的字段的值不是唯一的,那么必须加上具备唯一性的主键id(或其他唯一性字段)作为辅助排序,这样就能避免查询结果重复。