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();
            }
        }
    }
}

然后重启项目就可以了。

相关推荐
leo_qiu_s2 小时前
MERGE INTO语句
数据库
未来之窗软件服务2 小时前
幽冥大陆(六十二) 多数据库交叉链接系统Go语言—东方仙盟筑基期
数据库·人工智能·oracle·golang·数据库集群·仙盟创梦ide·东方仙盟
U-52184F692 小时前
【CGAL实战】深入理解二维受约束 Delaunay 网格生成
数据库·算法
rannn_1112 小时前
【SQL题解】力扣高频 SQL 50题|DAY4
数据库·后端·sql·leetcode·题解
q行2 小时前
MySQL学习日志--DQL和它的七大字句
数据库·学习·mysql
张人玉2 小时前
WPF HTTPS 通信示例使用说明
数据库·网络协议·http·c#·wpf
长春小霸王2 小时前
labview sqlite增删改查
数据库·sqlite·labview
猿小喵2 小时前
记录一次TDSQL-MySQL数据库主从延迟导致批量报错
数据库·mysql
科技块儿2 小时前
【深度解析】在响应速度与数据安全上权衡在线IP查询API与本地IP离线库
数据库·网络协议·tcp/ip