first commit

This commit is contained in:
2023-05-22 20:14:18 +08:00
parent 3baba77120
commit f5aa6b2f69
18 changed files with 158 additions and 167 deletions

View File

@ -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();
}

View File

@ -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;
}
}

View File

@ -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";
}
}

View File

@ -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);
}
}