diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DialectFactory.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DialectFactory.java index b5751390..3409b7ec 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DialectFactory.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/DialectFactory.java @@ -18,6 +18,8 @@ package com.mybatisflex.core.dialect; import java.util.EnumMap; import java.util.Map; + +import com.mybatisflex.core.exception.MybatisFlexException; import org.apache.ibatis.util.MapUtil; import com.mybatisflex.core.FlexGlobalConfig; import com.mybatisflex.core.dialect.impl.CommonsDialectImpl; @@ -45,6 +47,7 @@ public class DialectFactory { * 通过设置当前线程的数据库类型,以达到在代码执行时随时切换方言的功能 */ private static final ThreadLocal dbTypeThreadLocal = new ThreadLocal<>(); + private static DbType dbTypeGlobal = null ; /** @@ -75,6 +78,19 @@ public class DialectFactory { return dbTypeThreadLocal.get(); } + public static DbType getGlobalDbType() { + return dbTypeGlobal; + } + + public static void setGlobalDbType(DbType dbType) { + if(dbTypeGlobal == null&&dbType!=null){ + dbTypeGlobal = dbType ; + }else if(dbTypeGlobal != null){ + throw new MybatisFlexException("dbTypeGlobal is only set once"); + }else if(dbType==null){ + throw new MybatisFlexException("dbType can not be null"); + } + } /** * 清除当前线程的 dbType diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/MapperInvocationHandler.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/MapperInvocationHandler.java index b61464c8..cad1f7f7 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/MapperInvocationHandler.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/MapperInvocationHandler.java @@ -76,6 +76,11 @@ public class MapperInvocationHandler implements InvocationHandler { //优先获取用户自己配置的 dbType DbType dbType = DialectFactory.getHintDbType(); + DbType dbTypeGlobal = DialectFactory.getGlobalDbType(); + //当前线程没有设置dbType,但是全局设置了dbTypeGlobal,那么就使用全局的dbTypeGlobal + if(dbTypeGlobal!=null&&dbType==null){ + dbType = dbTypeGlobal ; + } if (dbType == null) { if (dataSourceKey != null && dataSource != null) { dbType = dataSource.getDbType(dataSourceKey);