记录 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 b.* 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为查询当前条件下的合计数量
该随笔为记录工作中遇到的问题,若有不对的地方,请大佬指正,万分感激!
标签:插件,工单表,revisit,表与,id,params,total,order,select 来源: https://www.cnblogs.com/must-grow/p/14930467.html