From af354f9f5ed710341686b96019b053346f172270 Mon Sep 17 00:00:00 2001 From: JEECG <445654970@qq.com> Date: Sat, 2 Aug 2025 19:10:24 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90issues/8666=E3=80=91=E5=8D=87=E7=BA=A7?= =?UTF-8?q?mybatisPlus=E5=90=8ESqlServer=E5=88=86=E9=A1=B5=E4=BD=BF?= =?UTF-8?q?=E7=94=A8OFFSET=20=EF=BC=9F=20ROWS=20FETCH=20NEXT=20=EF=BC=9F?= =?UTF-8?q?=20ROWS=20ONLY=EF=BC=8C=E5=AF=BC=E8=87=B4online=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8=E6=8A=A5=E9=94=99---?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/mybatis/MybatisPlusSaasConfig.java | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java index 2821ac6b1..f876b1e4b 100644 --- a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java +++ b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java @@ -1,11 +1,16 @@ package org.jeecg.config.mybatis; +import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; +import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils; +import lombok.extern.slf4j.Slf4j; +import me.zhyd.oauth.log.Log; import org.jeecg.common.config.TenantContext; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.TenantConstant; @@ -13,6 +18,7 @@ import org.jeecg.common.util.SpringContextUtils; import org.jeecg.common.util.TokenUtils; import org.jeecg.common.util.oConvertUtils; import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -23,16 +29,20 @@ import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerIntercept import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.LongValue; +import javax.sql.DataSource; /** * 单数据源配置(jeecg.datasource.open = false时生效) * @Author zhoujf * */ +@Slf4j @Configuration @MapperScan(value={"org.jeecg.**.mapper*"}) public class MybatisPlusSaasConfig { - + @Autowired + private DataSource dataSource; + /** * 是否开启系统模块的租户隔离 * 控制范围:用户、角色、部门、我的部门、字典、分类字典、多数据源、职务、通知公告 @@ -122,7 +132,23 @@ public class MybatisPlusSaasConfig { //update-begin-author:zyf date:20220425 for:【VUEN-606】注入动态表名适配拦截器解决多表名问题 interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor()); //update-end-author:zyf date:20220425 for:【VUEN-606】注入动态表名适配拦截器解决多表名问题 - interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); + + //update-begin---author:scott ---date:2025-08-02 for:【issues/8666】升级mybatisPlus后SqlServer分页使用OFFSET ? ROWS FETCH NEXT ? ROWS ONLY,导致online报表报错--- + DbType dbType = null; + try { + dbType = JdbcUtils.getDbType(dataSource.getConnection().getMetaData().getURL()); + log.info("当前数据库类型: {}", dbType); + } catch (SQLException e) { + Log.error(e.getMessage(), e); + } + if (dbType!=null && (dbType == DbType.SQL_SERVER || dbType == DbType.SQL_SERVER2005)) { + // 如果是SQL Server则覆盖为2005分页方式 + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.SQL_SERVER2005)); + } else { + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.SQL_SERVER2005)); + } + //update-end---author:scott ---date::2025-08-02 for:【issues/8666】升级mybatisPlus后SqlServer分页使用OFFSET ? ROWS FETCH NEXT ? ROWS ONLY,导致online报表报错--- + //【jeecg-boot/issues/3847】增加@Version乐观锁支持 interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor;