mybatis-plus插件解决sql报错:this is incompatible with sql_mode=only_full_group_by ”

错误原因

这个错误是 MySQL 5.7+ 版本中最常见的兼容性问题之一。ONLY_FULL_GROUP_BY 是 MySQL 的严格模式要求,确保 GROUP BY 查询的语义明确。

具体原因:

  1. SELECT 列表中的列不在 GROUP BY 子句中

  2. 且这些列也不是聚合函数的参数

  3. MySQL 无法确定从分组中的哪行返回这些列的值

解决的办法可以改sql,也可以改sql服务的conf配置, 但是如果你项目用的是mybatis-plus插件 , 就可以用我介绍的很简单的方法。

在项目增加一个configure配置类:

复制代码
@Configuration
public class MybatisPlusConfig {
    
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        
        // 添加自定义拦截器
        interceptor.addInnerInterceptor(new SqlModeInterceptor());
        
        return interceptor;
    }
    
    static class SqlModeInterceptor implements InnerInterceptor {
        @Override
        public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) {
            try {
                // 设置会话 SQL_MODE
                Statement stmt = connection.createStatement();
                stmt.execute("SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))");
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

然后重启项目就可以了。

相关推荐
Decay__9 小时前
18_MySQL 智能巡检方案 —— 巡检项清单 / 一键巡检脚本 / 健康评分
运维·数据库·sql·mysql·架构
java_logo9 小时前
Docker 部署 Liquibase:轻松搭建数据库变更管理
数据库·docker·容器·数据库管理·liquibase·轩辕镜像·数据库变更
凤凰院凶涛QAQ11 小时前
《MySQL内核拆解:从SQL到InnoDB》(四) : 联合查询 & 视图
数据库·sql·mysql
码农小河6611 小时前
基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
java·开发语言·数据库
张小姐的猫11 小时前
【MySQL】访问 & 数据流动原理
android·数据库·mysql·adb·1024程序员节
这个DBA有点耶15 小时前
信创场景下数据同步软件怎么选?对比开源CDC与原生闭环工具的结构性差异
数据库·mysql·架构
多客:duokelijie15 小时前
代练订单系统选型思路:跨品类游戏接入、订单分层管理、自动结算逻辑拆解!
数据库·mysql·微信小程序·前端框架·uni-app·php·持续部署
PingCAP15 小时前
平凯星辰上榜!2026 年胡润全球独角兽企业
数据库
PingCAP15 小时前
轨道交通 AFC 系统升级,平凯 Loop 把跨部门协同变成可追溯闭环
数据库