乐于分享
好东西不私藏

分页插件冲突问题

分页插件冲突问题

        分页插件的实现有两种实现一个是引用pageHelper,一般是配合mybatis使用的。需要引入下面的依赖。

       上面的分页插件版本依赖jsqlparser 0.9.5。然后在 mybatis-config.xml 中配置插件。

        代码使用示例:

  PageHelper.startPage(info.getCurrentPage(), info.getPageSize());        List list = caseLogService.getCaseLogList(info);        PageInfo pageInfo = new PageInfo<>(list);        return ResponseEntity.ok(pageInfo);

        第二种使用方式:使用mybatsi-plus的分页插件

        该配置需要jsqlparser 4.0版本及以上。

        代码使用示例:

 LambdaQueryWrapper queryWrapper = new QueryWrapper().lambda();        queryWrapper.select(IssExportTask::getIdIssExportTask::getOperatorNoIssExportTask::getCreateTimeIssExportTask::getReadOrNot,                IssExportTask::getStatusIssExportTask::getFileNameIssExportTask::getErrorMsgIssExportTask::getModuleIssExportTask::getUpdateTime,                IssExportTask::getOperatorNameIssExportTask::getTypeIssExportTask::getFileUrl,IssExportTask::getExpirationTime);        queryWrapper.eq(IssExportTask::getOperatorNo, empNo);        queryWrapper.orderByDesc(IssExportTask::getCreateTime);        Page page = new Page<>(request.getPageNumber(), request.getPageSize());        Page issExportTaskPage = issExportTaskMapper.selectPage(page, queryWrapper);        List records = issExportTaskPage.getRecords();

       现在代码报错如下:

Caused by: java.lang.NoSuchMethodError: net.sf.jsqlparser.statement.select.PlainSelect.getGroupByColumnReferences()Ljava/util/List;   

         这是由于我强制使用了jsqlparser 4.0版本导致的。

        这就是问题的冲突点,4.0的版本已经没有getGroupByColumnReferences()方法了。我的项目中使用了两套分页配置,一个是mybatis3.5.10,使用pageHelper进行分页。另一个配置是mybatis-plus的3.4.1,使用配置的MybatisPlusIntercepto进行分页,但是两者依赖的jsqlparser版本不一致,我升级或者降级都必然导致一个分页插件不能使用。最后我还是选择了降级jsqlparser版本,mybatis-plus的分页也可以使用pageHelper其它或原始的方式实现。

         除了上面的解决办法其实还有另一种方案,还是使用4.0的版本,但是关闭PageHelper的SQL解析器(SqlParser),这样影响也不是很大。

         PageHelper 的 SQL 解析(依赖 jsqlparser)主要用于”智能分页”(自动将 SQL 改写为 count 查询)。

        如果不开启 sqlParser 功能,PageHelper 不会调用getGroupByColumnReferences(),从而避开这个 NoSuchMethodError。

          配置方式:在 sqlSessionFactory 的 plugins 中添加 PageInterceptor,并在 PageHelper 配置中设置 sqlParser 为 null 或关闭。

        影响:复杂 SQL(如包含 GROUP BY)的分页可能统计不准(total = 实际返回条数而非总记录数),但绝大多数简单查询不受影响。 复杂 SQL(如有 GROUP BY / UNION):才会得到不准确的 total。