yonge 3 years ago
parent
commit
5b1cabb0f9

+ 10 - 1
dynamic-datasource/src/main/java/com/yonge/datasource/DataSourceConfig.java

@@ -1,6 +1,7 @@
 package com.yonge.datasource;
 
 import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
+
 import org.mybatis.spring.SqlSessionFactoryBean;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.beans.factory.annotation.Value;
@@ -8,12 +9,14 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Primary;
+import org.springframework.core.io.Resource;
 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 import org.springframework.transaction.PlatformTransactionManager;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 import javax.sql.DataSource;
+
 import java.util.HashMap;
 import java.util.Map;
 
@@ -26,6 +29,8 @@ public class DataSourceConfig {
 	private String resourcePath;
 	@Value("${mybatis.typeAliasesPackage}")
 	private String typeAliasesPackage;
+	@Value("${mybatis.configLocation}")
+	private Resource configLocation;
 
 	@Bean("master")
 	@Primary
@@ -49,8 +54,12 @@ public class DataSourceConfig {
 		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
 		// 配置动态数据源,如果没有将 dynamicDataSource 作为数据源则不能实现切换
 		sqlSessionFactoryBean.setDataSource(dynamicDataSource());
-		sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(resourcePath));
+		
+		PathMatchingResourcePatternResolver pmrpr = new PathMatchingResourcePatternResolver();
+		
+		sqlSessionFactoryBean.setMapperLocations(pmrpr.getResources(resourcePath));
 		sqlSessionFactoryBean.setTypeAliasesPackage(typeAliasesPackage);
+		sqlSessionFactoryBean.setConfigLocation(configLocation);
 
 		return sqlSessionFactoryBean;
 	}

+ 61 - 0
dynamic-datasource/src/main/java/com/yonge/datasource/interceptor/TenantSqlInterceptor.java

@@ -0,0 +1,61 @@
+package com.yonge.datasource.interceptor;
+
+import java.lang.reflect.Field;
+import java.util.Properties;
+
+import org.apache.ibatis.executor.statement.StatementHandler;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.SqlCommandType;
+import org.apache.ibatis.plugin.Interceptor;
+import org.apache.ibatis.plugin.Invocation;
+import org.apache.ibatis.plugin.Plugin;
+
+public class TenantSqlInterceptor implements Interceptor {
+
+	@Override
+	public Object intercept(Invocation invocation) throws Throwable {
+		StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
+		BoundSql boundSql = statementHandler.getBoundSql();
+		// HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+
+		// 获取 SQL 命令
+		MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
+		SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
+
+		// 获取参数
+		Object parameter = invocation.getArgs()[1];
+		
+		if (SqlCommandType.INSERT.equals(sqlCommandType) || SqlCommandType.UPDATE.equals(sqlCommandType)) {
+			
+		}
+
+		// 获取到原始sql语句
+		String originalSql = boundSql.getSql();
+		String lastSql = "";
+		String strsql = originalSql.replace(" ", "");
+		if (strsql.indexOf("cid=") == -1) {
+			if (originalSql.indexOf("where") != -1) {
+				lastSql = originalSql + " and tenant_id_ =";
+			} else {
+				lastSql = originalSql + " where and tenant_id_=";
+			}
+		}
+		// 通过反射修改sql语句
+		Field field = boundSql.getClass().getDeclaredField("sql");
+		field.setAccessible(true);
+		field.set(boundSql, lastSql);
+		return invocation.proceed();
+	}
+
+	@Override
+	public Object plugin(Object target) {
+		return Plugin.wrap(target, this);
+	}
+
+	@Override
+	public void setProperties(Properties properties) {
+
+	}
+
+}

+ 1 - 1
mec-common/common-core/src/main/java/com/ym/mec/common/page/PageUtil.java

@@ -22,7 +22,7 @@ public class PageUtil {
     public static <T> Page<T> getPage(Integer page, Integer rows) {
         Integer pageIndex = Optional.ofNullable(page).orElse(1);
         Integer pageSize = Optional.ofNullable(rows).orElse(20);
-        return new Page<>(pageIndex, pageSize);
+        return new Page<T>(pageIndex, pageSize);
     }
 
     /**