package com.rongwei.bsserver.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.extension.plugins.tenant.TenantHandler; import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser; import com.rongwei.commonservice.service.RedisService; import com.rongwei.rwadmincommon.system.vo.SysUserVo; import com.rongwei.rwcommon.utils.StringUtils; import com.rongwei.rwcommonconfig.config.ThreadLocalResource; import com.rongwei.rwcommonconfig.config.interceptor.QuerySqlAdaptationInterceptor; import com.rongwei.rwcommonconfig.config.interceptor.SaasPaginationInterceptor; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.StringValue; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.reflection.MetaObject; 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; import org.springframework.transaction.annotation.EnableTransactionManagement; import java.util.ArrayList; import java.util.List; /** * Created by duyisong on 17/5/28. */ @EnableTransactionManagement @Configuration @MapperScan("com.rongwei.*.*.dao") public class MybatisConfig { @Autowired private RedisService redisService; /** * 自定义查询sql多数据库适配 * @return */ @Bean public QuerySqlAdaptationInterceptor querySqlAdaptationInterceptor(){ QuerySqlAdaptationInterceptor sqlAdaptation = new QuerySqlAdaptationInterceptor(); return sqlAdaptation; } /* * 分页插件,自动识别数据库类型 * 多租户,请参考官网【插件扩展】 */ @Bean public SaasPaginationInterceptor paginationInterceptor() { SaasPaginationInterceptor paginationInterceptor = new SaasPaginationInterceptor(); /* * 【测试多租户】 SQL 解析处理拦截器
* 这里固定写成住户 1 实际情况你可以从cookie读取,因此数据看不到 【 麻花藤 】 这条记录( 注意观察 SQL )
*/ List sqlParserList = new ArrayList<>(); TenantSqlParser tenantSqlParser = new TenantSqlParser(); tenantSqlParser.setTenantHandler(new TenantHandler() { @Override public Expression getTenantId(boolean where) { String tenantId = null; String token = ThreadLocalResource.token.get(); SysUserVo currUser = null; if(StringUtils.isNotEmpty(token)){ currUser = redisService.getLoginUser(token); } if(currUser != null && currUser.getTenantDo() != null){ tenantId = currUser.getTenantDo().getId(); } return new StringValue(tenantId); } @Override public String getTenantIdColumn() { return "TENANTID"; } @Override public boolean doTableFilter(String tableName) { // 这里可以判断是否过滤表,true表示过滤、false不过滤 /* if ("user".equals(tableName)) { return true; }*/ return true; } }); // sqlParserList.add(tenantSqlParser); paginationInterceptor.setSqlParserList(sqlParserList); paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() { @Override public boolean doFilter(MetaObject metaObject) { MappedStatement ms = SqlParserHelper.getMappedStatement(metaObject); // 过滤自定义查询此时无租户信息约束【 麻花藤 】出现 if ("com.rongwei.rwadmincommon.system.dao.getAll".equals(ms.getId())) { return true; } return false; } }); paginationInterceptor.setLimit(2000); return paginationInterceptor; } }