• 记录 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为查询当前条件下的合计数量

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


  • 相关阅读:
    雷林鹏分享:XML to HTML
    雷林鹏分享:XML DOM
    雷林鹏分享:XML 编码
    雷林鹏分享: XML CDATA
    雷林鹏分享:服务器上的 XML
    雷林鹏分享:XML 注意事项
    雷林鹏分享:现实生活中的 XML
    雷林鹏分享:XML 相关技术
    雷林鹏分享:XML
    Android 系统架构图
  • 原文地址:https://www.cnblogs.com/must-grow/p/14930467.html
Copyright © 2020-2023  润新知