MySQL - 分页查询PaginationInnerInterceptor:autoCountSql,虽然不影响,但是看起来很难受

2023-11-17

        在排查问题的时候,发现在日志打印的控制台输出,有一堆下面的日志输出,虽然没有报错啥的,但是看起来很难受,于是决定一探究竟;

[04-07 13:51:58.869] [ WARN] [租户1_OYeFuitGXiPr] [XNIO-1 task-1] c.b.m.e.p.i.PaginationInnerInterceptor:autoCountSql:351 : optimize this sql to a count sql has exception, sql:"SELECT  id,activity_type,name,poster_attach_uuid,poster_attach_url,theme_color,rule,start_time,end_time,share_poster_attach_uuid,share_poster_attach_url,avatar_config,nick_name_config,app_title,app_cover_image_uuid,app_cover_image_url,limit_switch,max_num,daily_limit_switch,daily_max_num,is_close AS close,is_enabled AS enabled,is_deleted AS deleted,creator_id,updater_id,create_time,update_time  FROM table_activity 
 
 WHERE (activity_type = ? AND is_enabled = ? AND is_deleted = ?) ORDER BY create_time DESC", exception:
net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "close" "CLOSE"
    at line 1, column 302.

Was expecting one of:

    "ACTION"
    "ACTIVE"
    "ALGORITHM"
    "ARCHIVE"
    "ARRAY"
    "AT"
    "BYTE"
    "CASCADE"
    "CASE"
    "CAST"
    "CHANGE"
    "CHAR"
    "CHARACTER"
    "CHECKPOINT"
    "COLUMN"
    "COLUMNS"
    "COMMENT"
    "COMMIT"
    "COSTS"
    "CYCLE"
    "DBA_RECYCLEBIN"
    "DESC"
    "DESCRIBE"
    "DISABLE"
    "DISCONNECT"
    "DIV"
    "DO"
    "DUMP"
    "DUPLICATE"
    "ENABLE"
    "END"
    "EXCLUDE"
    "EXTRACT"
    "FALSE"
    "FILTER"
    "FIRST"
    "FLUSH"
    "FN"
    "FOLLOWING"
    "FORMAT"
    "FULLTEXT"
    "HISTORY"
    "INDEX"
    "INSERT"
    "INTERVAL"
    "ISNULL"
    "JSON"
    "KEY"
    "LAST"
    "LEADING"
    "LINK"
    "LOCAL"
    "LOG"
    "MATERIALIZED"
    "NO"
    "NOLOCK"
    "NULLS"
    "OF"
    "OPEN"
    "OVER"
    "PARALLEL"
    "PARTITION"
    "PATH"
    "PERCENT"
    "PRECISION"
    "PRIMARY"
    "PRIOR"
    "QUERY"
    "QUIESCE"
    "RANGE"
    "READ"
    "RECYCLEBIN"
    "REGISTER"
    "REPLACE"
    "RESTRICTED"
    "RESUME"
    "ROW"
    "ROWS"
    "SCHEMA"
    "SEPARATOR"
    "SEQUENCE"
    "SESSION"
    "SHUTDOWN"
    "SIBLINGS"
    "SIGNED"
    "SIZE"
    "SKIP"
    "SUSPEND"
    "SWITCH"
    "SYNONYM"
    "SYSTEM"
    "TABLE"
    "TABLESPACE"
    "TEMP"
    "TEMPORARY"
    "TIMEOUT"
    "TO"
    "TOP"
    "TRUE"
    "TRUNCATE"
    "TRY_CAST"
    "TYPE"
    "UNQIESCE"
    "UNSIGNED"
    "USER"
    "VALIDATE"
    "VALUE"
    "VALUES"
    "VIEW"
    "XML"
    "ZONE"
    <K_DATETIMELITERAL>
    <K_DATE_LITERAL>
    <K_NEXTVAL>
    <K_STRING_FUNCTION_NAME>
    <S_CHAR_LITERAL>
    <S_IDENTIFIER>
    <S_QUOTED_IDENTIFIER>

[04-07 13:51:58.877] [DEBUG] [租户1_OYeFuitGXiPr] [XNIO-1 task-1] c.s.s.c.m.S.selectPage_mpCount:debug:137 : ==>  Preparing: SELECT COUNT(*) FROM (SELECT id,activity_type,name,poster_attach_uuid,poster_attach_url,theme_color,rule,start_time,end_time,share_poster_attach_uuid,share_poster_attach_url,avatar_config,nick_name_config,app_title,app_cover_image_uuid,app_cover_image_url,limit_switch,max_num,daily_limit_switch,daily_max_num,is_close AS close,is_enabled AS enabled,is_deleted AS deleted,creator_id,updater_id,create_time,update_time FROM table_activity WHERE (activity_type = ? AND is_enabled = ? AND is_deleted = ?) ORDER BY create_time DESC) TOTAL
[04-07 13:51:58.878] [DEBUG] [租户1_OYeFuitGXiPr] [XNIO-1 task-1] c.s.s.c.m.S.selectPage_mpCount:debug:137 : ==> Parameters: 2(Integer), false(Boolean), false(Boolean)
[04-07 13:51:58.881] [DEBUG] [租户1_OYeFuitGXiPr] [XNIO-1 task-1] c.s.s.c.m.S.selectPage_mpCount:debug:137 : <==      Total: 1

net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "close" "CLOSE"
    at line 1, column 302.

        这个异常提示,其实已经明确的告诉了我们,跟这个close有关,上面日志打印的就是MySQL使用的关键字,其中就包括‘close’;

        查询的SQL语句中,的确是有 ... ...,is_close AS close,... ...;

         查了下代码中对应的实体类,如下,将数据库中的“is_close”映射了对象中的“close”;

@TableField(value = "is_close")
private boolean close;

        这里是进行数据分页查询的地方: 

Page<TableActivity> page = tableActivityService.page(request.getPage(), lambdaQueryWrapper);

        其中,分页的类继承自mybatis的分页,其中有一个这个参数,如下: 

//自动优化COUNT SQL
protected boolean optimizeCountSql = true;

         IDEA中全局搜索了下报错信息中的提示类(c.b.m.e.p.i.PaginationInnerInterceptor:autoCountSql:351);

 

protected String autoCountSql(IPage<?> page, String sql) {
        if (!page.optimizeCountSql()) {
            return lowLevelCountSql(sql);
        }
        try {
            //... ....
        } catch (JSQLParserException e) {
            // 无法优化使用原 SQL
            logger.warn("optimize this sql to a count sql has exception, sql:\"" + sql + "\", exception:\n" + e.getCause());
        } catch (Exception e) {
            logger.warn("optimize this sql to a count sql has error, sql:\"" + sql + "\", exception:\n" + e);
        }
        return lowLevelCountSql(sql);
    }

        catch里面的内容,不就跟我们的报错信息对应起来了嘛,是因为默认对我们的分页查询进行了COUNT的SQL进行了优化,但是我们的sql中又包含了MySQL的关键字,导致这个自动优化失败了,退化成了lowLevelCountSql(sql),因此查询是正常的,同时又有提示出来;

        解决方案:

                1. 在分页查询的时候 ,直接禁止它优化查询 setOptimizeCountSql(false)

Page<TableActivity> page = tableActivityService.page(request.getPage().setOptimizeCountSql(false), lambdaQueryWrapper);

                2. 修改实体类中的参数名,使其与MySQL中的关键字不产生冲突,如:close --> closed

@TableField(value = "is_close")
private boolean closed;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL - 分页查询PaginationInnerInterceptor:autoCountSql,虽然不影响,但是看起来很难受 的相关文章

随机推荐

  • Maven本地仓库有jar包却提示找不到 / 生成.lastUpdated文件

    Maven本地仓库有jar包却提示找不到 生成 lastUpdated文件 Maven仓库 remote repositories文件的作用 存在的问题 使用Maven管理项目时 如果连不到远程仓库 但是明明本地仓库中有对应的jar包 此时
  • 解决AttributeError: module ‘cv2‘ has no attribute ‘CV_HAAR_SCALE_IMAGE‘

    解决AttributeError module cv2 has no attribute CV HAAR SCALE IMAGE 问题描述 代码 frontalFaces faceCascade detectMultiScale image
  • Array.fill()用法

    Arrays fill 用于快速填充数组 但是只适用于一维数组 若是想填充二维数组则需要循环 详细用法 Arrays fill int a from to int var int a 需要填充的数组 from 数组填充的起始位置 包括此位置
  • Python类的构造方法深入剖析:详解与案例分析

    在Python中 类是面向对象编程的重要概念之一 类是对象的蓝图 通过定义类可以创建具有相同属性和方法的多个对象 类中的构造方法 init 方法 在对象创建时被调用 用于初始化对象的属性 本文将深入剖析Python类的构造方法 并通过案例分
  • Java中JSON把引用相同的对象变为"$ref":问题的分析与解决

    Java中JSON把引用相同的对象变为 ref 问题的分析与解决 后台返回给前端的数据一般是JSON格式的 使用com alibaba fastjson时 在把后台的响应数据转化为JSON格式时 具有相同引用的对象会变成 r e f
  • Postman的使用教程

    一 Postman背景介绍 用户在开发或者调试网络程序或者是网页B S模式的程序的时候是需要一些方法来跟踪网页请求的 用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具 今天给大家介绍的这款网页调试工具不仅可以调试简单的c
  • 目录的作用

    根目录 通常不在这里存储文件 bin 可执行文件 ls cd sbin 可执行文件 boot 开机启动的文件 包括linux内核以及开机菜单与开机所需配置文件等 dev 设备文件 任何设备与接口设备都是以文件形式存在于这个目录的 root
  • 一些重要站点

    linux常用命令集 http linux chinaitlab com special linuxcom nmon工具 http pkgs repoforge org nmon 一些源码工具的下载 http code google com
  • jdbc操作Date

    作为一个开发者 使用jdbc是最基本的要求 但是jdbc对应操作date类型的数据和hibernate是不同的 hibernate不需要考虑date是util date还是sql date也不需要考虑存入的date是否存有时分秒了 建议 J
  • [Python

    目录 一 问题简介 二 解决方案 1 全局搜索sign 2 文件局部搜索 3 寻找目标函数 4 调用函数 5 补全JS代码 6 token的获取 三 Python代码 1 UI类 2 爬虫逻辑类 四 完整代码 JS代码 Python代码 一
  • 软件工程-第七章-实现

    软件工程 第七章 实现 7 实现 7 2 软件测试基础 7 2 3 测试方法 7 2 4 测试步骤 7 3 单元测试 7 3 2 代码审查 7 4 集成测试 7 4 1 自顶向下集成 7 4 2 自底向上集成 7 5 确认测试 7 5 3
  • 公众号开放,关注软件开发过程中的哪些坑

    一位十年码农的碎碎念 扫码关注获取更多精彩内容
  • 使用HEXO搭建个人博客时遇到的问题日志 PART.1

    我都没想到光连建站都能遇到这么多问题 1 解决 Failed to connect to github com port 443 connection timed out 当使用hexo d的时候 一直连接超时 大概率应该是vpn导致的 方
  • 成都计算机学校怎么样,成都计算机学校计算机专业怎么样?

    目前 根据最新数据显示 我国由于互联网的快速发展 使得计算机专业人才匮乏 需要的计算机人才数量将会越来越大 而根据老师的调查发现 从学校毕业的学生是比较吃香的 由于最近有很多学生在咨询到成都计算机学校学习计算机专业怎么样 所以老师在下方整理
  • 二叉树的非递归遍历算法 - 树结构

    遍历是树结构算法中的重要部分 前面发了有关递归遍历的内容 要知道 递归就是函数调用函数本身 运行起来就是函数嵌套函数 层层嵌套 所以函数调用 参数堆栈都是不小的开销 但是程序简单 然而 非递归即不断地对参数入栈 出栈 省去了函数层层展开 层
  • C#键盘输入方法(Input.GetKey()和Input.GetKeyUp())需要注意的一个问题(一个U3D初学者的总结)

    大家好 我用的是2017 1 1f1Personal版本 最近在复习蓄力发射时 按下空格键的时间越长 游戏对象Sphere发射的越远 发现这样一个问题 代码如下 using System Collections using System C
  • CSS 3D图片翻转 ——3D Flipping Effect (3D 翻转效果——

    效果 代码如下
  • 【好工具】 深度学习炼丹,你怎么能少了这款工具!

    欢迎来到 好工具 专栏 本次我们给介绍一款可以进行远程深度学习炼丹的工具 JupyterLab 及其配置流程 帮助读者在本地进行调试 Max 开发效率 作者 编辑 Leong 导言 不知道读者们有没有发现 如果你用 Anaconda 中的
  • 自己动手写RTOS:02-在M3内核上实现pendsvc

    自己动手写RTOS 自己动手写RTOS 01基础知识和理论部分 自己动手写RTOS 02 在M3内核上实现pendsvc 文章目录 自己动手写RTOS 一 M3内核的相关知识 1 1寄存器 1 2特殊寄存器 1 3堆栈 二 pendSVC实
  • MySQL - 分页查询PaginationInnerInterceptor:autoCountSql,虽然不影响,但是看起来很难受

    在排查问题的时候 发现在日志打印的控制台输出 有一堆下面的日志输出 虽然没有报错啥的 但是看起来很难受 于是决定一探究竟 04 07 13 51 58 869 WARN 租户1 OYeFuitGXiPr XNIO 1 task 1 c b