Closed 285773395 closed 4 years ago
你这 3.4.0对应的sql语句
既不是count语句也不是分页语句,你怎么得出是我们分页插件的问题的?
使用PaginationInterceptor方式没有问题了,使用MybatisPlusInterceptor3.4.0的方式还有问题,应该是我对相关的方法不熟悉导致,我在研究一下,该issue暂时先关闭了,谢谢
之前使用较早版本PaginationInterceptor和目前的使用方式上有些出入,按照官方文档更改了一下,目前没有问题了
当前使用版本(3.4.0)
该问题是如何引起的?(确定最新版也有问题再提!!!)
3.3.2升级到3.4.0后出现问题。
重现步骤(如果有就写完整)
1.升级pom对应的依赖
升级变更为
2.按照官方的3.4.0新插件引入方式原MybatisPlusConfig package com.zl.zcloud.data.config;
import com.baomidou.mybatisplus.core.parser.ISqlParser; import com.baomidou.mybatisplus.core.parser.ISqlParserFilter; import com.baomidou.mybatisplus.core.parser.SqlParserHelper; import com.baomidou.mybatisplus.core.toolkit.PluginUtils; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize; import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler; import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
import com.zl.zcloud.data.config.datascope.DataScopeInterceptor; import com.zl.zcloud.data.config.holder.TenantContextHolder; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.LongValue; import net.sf.jsqlparser.expression.StringValue; import net.sf.jsqlparser.expression.operators.relational.ExpressionList; import net.sf.jsqlparser.expression.operators.relational.InExpression; import net.sf.jsqlparser.schema.Column; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.reflection.MetaObject; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource; import java.util.ArrayList; import java.util.List;
@SuppressWarnings("ALL") @Configuration @ConditionalOnBean(DataSource.class) @AutoConfigureAfter(DataSourceAutoConfiguration.class) @MapperScan("com.zl.**.mapper") public class MybatisPlusConfig {
}
变更为新的3.4.0MybatisPlusConfig package com.zl.zcloud.data.config;
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer; import com.baomidou.mybatisplus.core.parser.ISqlParser; import com.baomidou.mybatisplus.core.parser.ISqlParserFilter; import com.baomidou.mybatisplus.core.parser.SqlParserHelper; import com.baomidou.mybatisplus.core.toolkit.PluginUtils; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize; import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler; //import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
import com.zl.zcloud.data.config.datascope.DataScopeInterceptor; import com.zl.zcloud.data.config.holder.TenantContextHolder; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.LongValue; import net.sf.jsqlparser.expression.StringValue; import net.sf.jsqlparser.expression.operators.relational.ExpressionList; import net.sf.jsqlparser.expression.operators.relational.InExpression; import net.sf.jsqlparser.schema.Column; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.reflection.MetaObject; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource; import java.util.ArrayList; import java.util.List;
@SuppressWarnings("ALL") @Configuration @ConditionalOnBean(DataSource.class) @AutoConfigureAfter(DataSourceAutoConfiguration.class) @MapperScan("com.zl..mapper") public class MybatisPlusConfig { /
新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除) */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() { @Override public Expression getTenantId() { return new LongValue(1); }
// interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
}
@Bean public ConfigurationCustomizer configurationCustomizer() { return configuration -> configuration.setUseDeprecatedExecutor(false); }
/**
}
报错信息
原3.3.2对应的sql语句 SELECT COUNT(1) FROM (SELECT GROUP_CONCAT(DISTINCT dept.name) AS deptNames, GROUP_CONCAT(DISTINCT role.name) AS roleNames, u.id AS userid, u.name AS name, u.mobile AS mobile, u.englishName AS englishName, u.position AS position, u.email AS email, u.avatar AS avatar, u.telephone AS telephone, u.enable AS enable, u.status AS status, u.isleader AS isleader, GROUP_CONCAT(du.departmentId) AS deptId FROM user u LEFT JOIN department_user du ON u.id = du.userId LEFT JOIN department dept ON dept.id = du.departmentId LEFT JOIN user_role ur ON u.id = ur.userId LEFT JOIN role role ON role.id = ur.roleId GROUP BY u.id) temp_data_scope WHERE temp_data_scope.deptId REGEXP '(^|,)(2)(,|$)'
3.4.0对应的sql语句
多了一层嵌套查询。请帮忙看一下谢谢~~