mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-06 16:48:24 +08:00
Merge pull request #252 from farukonfly/main
Add global dialect setting
This commit is contained in:
commit
8e51a935bb
@ -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<DbType> 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
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user