记录 A表与B表中最新的一条数据关联(例子工单表与工单回访表)和 PageHelper插件丢失order by语句

工单表order 表结构及部分测试数据如下:

id order_name xxx

1 order_1  ....

2 order_2 ....

3 order_3

工单回访表 order_revisit表结构及部分测试数据如下:

id    order_id      revisit_date                 revisit_status(1,2,3表示不同的回访状态)

1     1         2021-06-25 13:02:01        1

2      1             2021-06-25 14:02:01        1

3      1             2021-06-25 16:02:01        1

想要的结果是工单表与工单回访表中revisit_date时间最新的一条数据关联

select c.* from(select a.*,b.revisit_date, b.revisit_status from order a left join (select m.*,MAX(m.revisit_date) from(select * from order_revisit order by revisit_date desc) m group by m.id) b where ......) c

在分页查询时,PageHelper会先查询total,total大于0才会执行上面的sql语句

注意:pagehelper的坑点就在于会丢失语句中的order by, 所以统计出来的数据则不正确,则会出现实际数据与total数据不符合

解决方式:

1) 强制执行order by , 在order by语句前加上    /*keep orderby*/

2)重写查询total, 伪代码如下:

public PageResponse<T> selectPage(T params){
   PageHelper.startPage(params.getCurrent(),params.getPageSize(), false);  
List<T> resultList = xxxMapper.selectList(params);  
 
long total = xxxMapper.selectTotal(params);
   PageInfo pageIfo = new PageInfo(resultList);
pageInfo.setTotal(total);
   return PageResponse.of(pageInfo.getPageNum(), pageInfo.getPageSize(), pageInfo.getTotal(), resultList);
}

 

selectList为实际查询数据的sql,
selectTotal为查询当前条件下的合计数量

该随笔为记录工作中遇到的问题,若有不对的地方,请大佬指正,万分感激!


 

posted @ 2021-06-25 12:50  从零|再出发  阅读(251)  评论(0编辑  收藏  举报