|
- package com.iformall.plugin;
-
- import org.apache.ibatis.executor.statement.StatementHandler;
- import org.apache.ibatis.plugin.*;
- import org.apache.ibatis.session.ResultHandler;
-
- import com.iformall.plugin.entity.ChainValue;
-
- import java.sql.Connection;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- /**
- *共享数据库的多租户系统实现
- * Created by Stormeye on 2018/10/22.
- */
- @Intercepts({
- //@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}),
- //@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})
- @Signature( method = "prepare", type = StatementHandler.class,args = {Connection.class, Integer.class}),
- @Signature(method = "query", type = StatementHandler.class, args = {java.sql.Statement.class, ResultHandler.class})
- })
- public class MyBatisItercepters implements Interceptor {
-
- private List<MyBatisPlus> plugins;
-
- public MyBatisItercepters(){
- }
-
- public void setPlugins(List<MyBatisPlus> plugins) {
- this.plugins = plugins;
- }
-
- public Object intercept(Invocation invocation) throws Throwable {
- if (null != plugins && plugins.size() > 0 ) {
- // 能从cookie或者session获取到tenantId
- Map<String,ChainValue> chainValues = new HashMap<String,ChainValue>();
- for (int i = 0 ; i < plugins.size() ; i++) {
- MyBatisPlus plug = plugins.get(i);
- invokeIntercept(plug, invocation, chainValues);
- }
- }
- return invocation.proceed();
- }
-
- private void invokeIntercept(MyBatisPlus plug,Invocation invocation,Map<String,ChainValue> chainMap) throws Throwable {
- Map<String,ChainValue> resultMap = plug.intercept(invocation, chainMap);
- if (null != resultMap) {
- chainMap.putAll(resultMap);
- }
- }
-
- /**
- * 生成代理对象
- *
- * @param target
- * @return
- */
- @Override
- public Object plugin(Object target) {
- if (target instanceof StatementHandler) {
- return Plugin.wrap(target, this);
- } else {
- return target;
- }
- }
-
- }
|