first commit
This commit is contained in:
@ -1,8 +1,5 @@
|
||||
package com.qiaoba.common.base.context;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 全局上下文对象
|
||||
*
|
||||
@ -12,31 +9,74 @@ import java.util.Map;
|
||||
*/
|
||||
public class BaseContext {
|
||||
|
||||
private static final String DATABASE_TYPE_MAP_KEY = "databaseType";
|
||||
/**
|
||||
* 数据库类型
|
||||
*/
|
||||
private static final ThreadLocal<String> DATABASE_TYPE_HOLDER = new ThreadLocal<>();
|
||||
|
||||
private static final ThreadLocal<Map<String, Object>> CONTEXT_HOLDER = new ThreadLocal<>();
|
||||
/**
|
||||
* 租户ID
|
||||
*/
|
||||
private static final ThreadLocal<String> TENANT_ID_HOLDER = new ThreadLocal<>();
|
||||
|
||||
/**
|
||||
* 数据源
|
||||
*/
|
||||
private static final ThreadLocal<String> DATASOURCE_HOLDER = new ThreadLocal<>();
|
||||
|
||||
/**
|
||||
* 获取上下文中数据库类型
|
||||
*/
|
||||
public static String getDatabaseType() {
|
||||
return DATABASE_TYPE_HOLDER.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置上下文中数据库类型
|
||||
*/
|
||||
public static void setDatabaseType(String type) {
|
||||
DATABASE_TYPE_HOLDER.set(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取上下文中租户ID
|
||||
*/
|
||||
public static String getTenantId() {
|
||||
return TENANT_ID_HOLDER.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置上下文中租户ID
|
||||
*/
|
||||
public static void setTenantId(String tenantId) {
|
||||
TENANT_ID_HOLDER.set(tenantId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取上下文中的数据源
|
||||
*/
|
||||
public String getDatabaseType() {
|
||||
return CONTEXT_HOLDER.get().get(DATABASE_TYPE_MAP_KEY).toString();
|
||||
public static String getDataSource() {
|
||||
return DATASOURCE_HOLDER.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置上下文中的数据源
|
||||
*/
|
||||
public void setDatabaseType(String type) {
|
||||
Map<String, Object> map = new HashMap<>(1);
|
||||
map.put(DATABASE_TYPE_MAP_KEY, type);
|
||||
CONTEXT_HOLDER.set(map);
|
||||
public static void setDataSource(String dataSource) {
|
||||
DATASOURCE_HOLDER.set(dataSource);
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除上下文中的数据源
|
||||
* 清除所有的ThreadLocal
|
||||
*/
|
||||
public void clearDataSource() {
|
||||
CONTEXT_HOLDER.remove();
|
||||
public static void clearAllHolder() {
|
||||
// 清除上下文中数据源
|
||||
DATASOURCE_HOLDER.remove();
|
||||
// 清除上下文中租户ID
|
||||
TENANT_ID_HOLDER.remove();
|
||||
// 清除上下文中数据库类型
|
||||
DATABASE_TYPE_HOLDER.remove();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -0,0 +1,52 @@
|
||||
package com.qiaoba.common.base.enums;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 数据库类型
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/22 16:41
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum DataBaseTypeEnum {
|
||||
|
||||
/**
|
||||
* MySQL
|
||||
*/
|
||||
MY_SQL("MySQL"),
|
||||
|
||||
/**
|
||||
* Oracle
|
||||
*/
|
||||
ORACLE("Oracle"),
|
||||
|
||||
/**
|
||||
* PostgreSQL
|
||||
*/
|
||||
POSTGRE_SQL("PostgreSQL"),
|
||||
|
||||
/**
|
||||
* SQL Server
|
||||
*/
|
||||
SQL_SERVER("Microsoft SQL Server");
|
||||
|
||||
private final String type;
|
||||
|
||||
public static DataBaseTypeEnum find(String databaseProductName) {
|
||||
if (StrUtil.isBlank(databaseProductName)) {
|
||||
return null;
|
||||
}
|
||||
for (DataBaseTypeEnum type : values()) {
|
||||
if (type.getType().equals(databaseProductName)) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package com.qiaoba.common.base.utils;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import com.qiaoba.common.base.context.BaseContext;
|
||||
import com.qiaoba.common.base.enums.DataBaseTypeEnum;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* 数据库工具类
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/22 16:41
|
||||
*/
|
||||
@Slf4j
|
||||
public class DatabaseUtil {
|
||||
|
||||
/**
|
||||
* 根据数据库类型,处理find_in_set函数
|
||||
*
|
||||
* @param var1 参数1
|
||||
* @param var2 参数2
|
||||
* @return 处理后的sql
|
||||
*/
|
||||
public static String handleFindInSet(Object var1, String var2) {
|
||||
DataBaseTypeEnum dataBaseType = DataBaseTypeEnum.find(BaseContext.getDatabaseType());
|
||||
String var = Convert.toStr(var1);
|
||||
if (dataBaseType == DataBaseTypeEnum.SQL_SERVER) {
|
||||
// charindex(',100,' , ',0,100,101,') <> 0
|
||||
return "charindex('," + var + ",' , ','+" + var2 + "+',') <> 0";
|
||||
} else if (dataBaseType == DataBaseTypeEnum.POSTGRE_SQL) {
|
||||
// (select position(',100,' in ',0,100,101,')) <> 0
|
||||
return "(select position('," + var + ",' in ','||" + var2 + "||',')) <> 0";
|
||||
} else if (dataBaseType == DataBaseTypeEnum.ORACLE) {
|
||||
// instr(',0,100,101,' , ',100,') <> 0
|
||||
return "instr(','||" + var2 + "||',' , '," + var + ",') <> 0";
|
||||
}
|
||||
// find_in_set(100 , '0,100,101')
|
||||
return "find_in_set(" + var + " , " + var2 + ") <> 0";
|
||||
}
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
package com.qiaoba.common.base.utils;
|
||||
|
||||
/**
|
||||
* 租户工具类
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/9 12:57
|
||||
*/
|
||||
public class TenantUtil {
|
||||
|
||||
private static final ThreadLocal<String> TENANT_ID_HOLDER = new ThreadLocal<>();
|
||||
|
||||
/**
|
||||
* 获取登录用户的租户ID
|
||||
*
|
||||
* @return username
|
||||
*/
|
||||
public static String getTenantId() {
|
||||
return TENANT_ID_HOLDER.get();
|
||||
}
|
||||
|
||||
public static void clearTenantId() {
|
||||
TENANT_ID_HOLDER.remove();
|
||||
}
|
||||
|
||||
public static void setTenantId(String tenantId) {
|
||||
TENANT_ID_HOLDER.set(tenantId);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user