feat: add highgo data converter

This commit is contained in:
2025-04-09 18:23:09 +08:00
parent 5daf13eefe
commit f4e6f492d7
7 changed files with 284 additions and 114 deletions

View File

@@ -19,10 +19,8 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.sql.Connection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.sql.SQLException;
import java.util.*;
@Service("base")
public class BaseMapperImpl implements BaseMapper {
@@ -44,7 +42,7 @@ public class BaseMapperImpl implements BaseMapper {
}
@Override
public String getDataConfig(){
public String getDataConfig() {
String key;
DatasourceConfig datasourceConfig = new DatasourceConfig();
try {
@@ -98,7 +96,7 @@ public class BaseMapperImpl implements BaseMapper {
JudgesNull(dataMap.getData(), "data can not be null!");
JudgesNull(dataMap.getTableName(), "tableName can not be null!");
if (DataUnit.HANGO.equals(dataTypeConfig)) {
dataMap.setData(formatMap(dataMap.getData()));
dataMap.setData(formatMap(dataMap.getData(), dataMap.getTableName()));
}
if (StringUtils.isEmpty(dataMap.getPkName())) {
dataMap.setPkName("ID");
@@ -121,7 +119,8 @@ public class BaseMapperImpl implements BaseMapper {
return i;
}
public Map<String, Object> formatMap(Map<String, Object> data) {
public Map<String, Object> formatMap(Map<String, Object> data, String tableName) {
return getStringObjectMapForHighGo(tableName, data, getDataConfig());
// // 遍历 Map 并转换值
// for (Map.Entry<String, Object> entry : data.entrySet()) {
// Object value = entry.getValue();
@@ -136,7 +135,6 @@ public class BaseMapperImpl implements BaseMapper {
// data.put(entry.getKey(), ((Number) value).longValue());
// }
// }
return data;
}
@Override
@@ -145,7 +143,7 @@ public class BaseMapperImpl implements BaseMapper {
JudgesNull(data, "tableName can not be null!");
String dataTypeConfig = getDataConfig();
if (DataUnit.HANGO.equals(dataTypeConfig)) {
data = formatMap(data);
data = formatMap(data, tableName);
}
if (StringUtils.isEmpty(pkName)) {
pkName = "ID";
@@ -175,12 +173,25 @@ public class BaseMapperImpl implements BaseMapper {
private int updateByWhere(Condition condition, String tableName, Map<String, Object> data) {
Map<String, Object> params = condition.getParamMap();
params.put("tableName", tableName);
params.put("info", formatMap(data));
String dataTypeConfig = getDataConfig();
params.put("info", formatMap(data,tableName));
params.put("sql", condition.getSql());
int i = sqlSessionTemplate.update(TABLE_MAPPER_PACKAGE + "updateByWhere", params);
return i;
}
private Map<String, Object> getStringObjectMapForHighGo(String tableName, Map<String, Object> data, String dataTypeConfig) {
if (DataUnit.HANGO.equals(dataTypeConfig)) {
// 获取数据库字段类型
Map<String, String> columnTypes = TableMetadataCache.getColumnTypesFromCache(tableName.toLowerCase());
if(columnTypes!=null){
// 自动转换数据类型
data = DataTypeConverter.convertDataTypes(data, columnTypes);
}
}
return data;
}
@Override
public <E> int updateByPk(DataMap<E> dataMap) {
JudgesNull(dataMap.getData(), "data can not be null!");
@@ -375,22 +386,16 @@ public class BaseMapperImpl implements BaseMapper {
return tableMapper.useSql(SelectCondition.builder().tableName(tableName).build().getSql());
}
private List<Map<String, Object>> selectList(Condition condition) {
private List<Map<String, Object>> selectList(Condition condition, String tableName) {
Map<String, Object> params = condition.getParamMap();
String dataTypeConfig = getDataConfig();
if (DataUnit.HANGO.equals(dataTypeConfig)) {
params = formatMap(params);
}
params.put("sql", condition.getSql());
return sqlSessionTemplate.selectList(TABLE_MAPPER_PACKAGE + "useSql", params);
}
private Map<String, Object> selectOne(Condition condition) {
private Map<String, Object> selectOne(Condition condition, String tableName) {
Map<String, Object> params = condition.getParamMap();
String dataTypeConfig = getDataConfig();
if (DataUnit.HANGO.equals(dataTypeConfig)) {
params = formatMap(params);
}
params.put("sql", condition.getSql());
return sqlSessionTemplate.selectOne(TABLE_MAPPER_PACKAGE + "userSqlByOne", params);
}
@@ -399,14 +404,14 @@ public class BaseMapperImpl implements BaseMapper {
public <E> List<Map<String, Object>> selectByEqual(DataMap<E> dataMap, Map<String, Object> map) {
JudgesNull(dataMap.getTableName(), "tableName can not be null!");
Condition condition = equal(dataMap, map);
return selectList(condition);
return selectList(condition, dataMap.getTableName());
}
@Override
public List<Map<String, Object>> selectByEqual(String tableName, Map<String, Object> map) {
JudgesNull(tableName, "tableName can not be null!");
Condition condition = equal(DataMap.builder().tableName(tableName).build(), map);
return selectList(condition);
return selectList(condition, tableName);
}
@@ -428,10 +433,10 @@ public class BaseMapperImpl implements BaseMapper {
JudgesNull(dataMap.getTableName(), "tableName can not be null!");
Condition condition = equal(dataMap, map);
if (webPageInfo.isEnableCache()) {
return MyPageHelper.start(webPageInfo, condition.getSql(), () -> selectList(condition));
return MyPageHelper.start(webPageInfo, condition.getSql(), () -> selectList(condition, dataMap.getTableName()));
}
MyPageHelper.start(webPageInfo);
return new PageInfo<>(selectList(condition));
return new PageInfo<>(selectList(condition, dataMap.getTableName()));
}
@Override
@@ -439,17 +444,17 @@ public class BaseMapperImpl implements BaseMapper {
JudgesNull(tableName, "tableName can not be null!");
Condition condition = equal(DataMap.builder().tableName(tableName).build(), map);
if (webPageInfo.isEnableCache()) {
return MyPageHelper.start(webPageInfo, condition.getSql(), () -> selectList(condition));
return MyPageHelper.start(webPageInfo, condition.getSql(), () -> selectList(condition, tableName));
}
MyPageHelper.start(webPageInfo);
return new PageInfo<>(selectList(condition));
return new PageInfo<>(selectList(condition, tableName));
}
@Override
public <E> Map<String, Object> selectOneByEqual(DataMap<E> dataMap, Map<String, Object> map) {
JudgesNull(dataMap.getTableName(), "tableName can not be null!");
Condition condition = equal(dataMap, map);
return selectOne(condition);
return selectOne(condition, dataMap.getTableName());
}
@Override
@@ -459,7 +464,7 @@ public class BaseMapperImpl implements BaseMapper {
JudgesNull(dataMap.getPkValue(), "pkValue can not be null!");
Condition condition = Condition.creatCriteria(dataMap).build();
condition = condition.toCreatCriteria().andEqual(dataMap.getPkName(), dataMap.getPkValue()).build();
return selectOne(condition);
return selectOne(condition, dataMap.getTableName());
}
@Override
@@ -469,7 +474,7 @@ public class BaseMapperImpl implements BaseMapper {
JudgesNull(pkValue, "pkValue can not be null!");
Condition condition = Condition.creatCriteria(DataMap.builder().sysOsTable(osSysTable).pkValue(pkValue).build()).build();
condition = condition.toCreatCriteria().andEqual(osSysTable.getTablePk(), pkValue).build();
return selectOne(condition);
return selectOne(condition, osSysTable.getTableName());
}
@Override
@@ -479,26 +484,27 @@ public class BaseMapperImpl implements BaseMapper {
JudgesNull(pkValue, "pkValue can not be null!");
Condition condition = Condition.creatCriteria(DataMap.builder().tableName(tableName).pkName(pkName).pkValue(pkValue).build()).build();
condition = condition.toCreatCriteria().andEqual(pkName, pkValue).build();
return selectOne(condition);
return selectOne(condition,tableName);
}
@Override
public List<Map<String, Object>> selectByCondition(Condition condition) {
return selectList(condition);
JudgesNull(condition.getSelectCondition(), "tableName can not be null!");
return selectList(condition,condition.getSelectCondition().getTableName());
}
@Override
public <E> List<Map<String, Object>> selectByCondition(DataMap<E> dataMap, Condition condition) {
JudgesNull(dataMap.getTableName(), "tableName can not be null!");
condition = condition.toCreatCriteria(dataMap).build();
return selectList(condition);
return selectList(condition,dataMap.getTableName());
}
@Override
public List<Map<String, Object>> selectByCondition(String tableName, Condition condition) {
JudgesNull(tableName, "tableName can not be null!");
condition = condition.toCreatCriteria(DataMap.builder().tableName(tableName).build()).build();
return selectList(condition);
return selectList(condition,tableName);
}
@Override
@@ -507,7 +513,7 @@ public class BaseMapperImpl implements BaseMapper {
condition = condition
.toCreatCriteria(DataMap.builder().tableName(tableName).fieldList(fieldList).build())
.build();
return selectList(condition);
return selectList(condition,tableName);
}
@Override
@@ -516,16 +522,16 @@ public class BaseMapperImpl implements BaseMapper {
condition = condition
.toCreatCriteria(DataMap.builder().tableName(tableName).fields(fieldList).build())
.build();
return selectList(condition);
return selectList(condition,tableName);
}
@Override
public PageInfo<Map<String, Object>> selectByCondition(Condition condition, WebPageInfo webPageInfo) {
MyPageHelper.start(webPageInfo);
if (webPageInfo.isEnableCache()) {
return MyPageHelper.start(webPageInfo, condition.getSql(), () -> selectList(condition));
return MyPageHelper.start(webPageInfo, condition.getSql(), () -> selectList(condition,condition.getSelectCondition().getTableName()));
}
return new PageInfo<>(selectList(condition));
return new PageInfo<>(selectList(condition,condition.getSelectCondition().getTableName()));
}
@Override
@@ -534,10 +540,10 @@ public class BaseMapperImpl implements BaseMapper {
condition = condition.toCreatCriteria(dataMap).build();
if (webPageInfo.isEnableCache()) {
Condition finalCondition = condition;
return MyPageHelper.start(webPageInfo, condition.getSql(), () -> selectList(finalCondition));
return MyPageHelper.start(webPageInfo, condition.getSql(), () -> selectList(finalCondition,dataMap.getTableName()));
}
MyPageHelper.start(webPageInfo);
return new PageInfo<>(selectList(condition));
return new PageInfo<>(selectList(condition,dataMap.getTableName()));
}
@Override
@@ -546,10 +552,10 @@ public class BaseMapperImpl implements BaseMapper {
condition = condition.toCreatCriteria(DataMap.builder().tableName(tableName).build()).build();
if (webPageInfo.isEnableCache()) {
Condition finalCondition = condition;
return MyPageHelper.start(webPageInfo, condition.getSql(), () -> selectList(finalCondition));
return MyPageHelper.start(webPageInfo, condition.getSql(), () -> selectList(finalCondition,tableName));
}
MyPageHelper.start(webPageInfo);
return new PageInfo<>(selectList(condition));
return new PageInfo<>(selectList(condition,tableName));
}
@Override
@@ -558,10 +564,10 @@ public class BaseMapperImpl implements BaseMapper {
condition = condition.toCreatCriteria(DataMap.builder().tableName(tableName).fieldList(fieldList).build()).build();
if (webPageInfo.isEnableCache()) {
Condition finalCondition = condition;
return MyPageHelper.start(webPageInfo, condition.getSql(), () -> selectList(finalCondition));
return MyPageHelper.start(webPageInfo, condition.getSql(), () -> selectList(finalCondition,tableName));
}
MyPageHelper.start(webPageInfo);
return new PageInfo<>(selectList(condition));
return new PageInfo<>(selectList(condition,tableName));
}
@Override
@@ -570,43 +576,43 @@ public class BaseMapperImpl implements BaseMapper {
condition = condition.toCreatCriteria(DataMap.builder().tableName(tableName).fields(fieldList).build()).build();
if (webPageInfo.isEnableCache()) {
Condition finalCondition = condition;
return MyPageHelper.start(webPageInfo, condition.getSql(), () -> selectList(finalCondition));
return MyPageHelper.start(webPageInfo, condition.getSql(), () -> selectList(finalCondition,tableName));
}
MyPageHelper.start(webPageInfo);
return new PageInfo<>(selectList(condition));
return new PageInfo<>(selectList(condition,tableName));
}
@Override
public <E> Map<String, Object> selectOneByCondition(DataMap<E> dataMap, Condition condition) {
JudgesNull(dataMap.getTableName(), "tableName can not be null!");
condition = condition.toCreatCriteria(dataMap).build();
return selectOne(condition);
return selectOne(condition,dataMap.getTableName());
}
@Override
public Map<String, Object> selectOneByCondition(String tableName, Condition condition) {
JudgesNull(tableName, "tableName can not be null!");
condition = condition.toCreatCriteria(DataMap.builder().tableName(tableName).build()).build();
return selectOne(condition);
return selectOne(condition,tableName);
}
@Override
public Map<String, Object> selectOneByCondition(String tableName, List<String> fieldList, Condition condition) {
JudgesNull(tableName, "tableName can not be null!");
condition = condition.toCreatCriteria(DataMap.builder().tableName(tableName).fieldList(fieldList).build()).build();
return selectOne(condition);
return selectOne(condition,tableName);
}
@Override
public Map<String, Object> selectOneByCondition(String tableName, String fieldList, Condition condition) {
JudgesNull(tableName, "tableName can not be null!");
condition = condition.toCreatCriteria(DataMap.builder().tableName(tableName).fields(fieldList).build()).build();
return selectOne(condition);
return selectOne(condition,tableName);
}
@Override
public Map<String, Object> selectOneByCondition(Condition condition) {
return selectOne(condition);
return selectOne(condition,condition.getSelectCondition().getTableName());
}
@Override
@@ -615,7 +621,7 @@ public class BaseMapperImpl implements BaseMapper {
SelectCondition selectJoinBuilder = SelectCondition
.joinBuilder(tableName)
.join(joinCondition).build();
return tableMapper.useSql(condition.toCreatCriteria(selectJoinBuilder).build().getSql());
return tableMapper.useSql(condition.toCreatCriteria(selectJoinBuilder,tableName).build().getSql());
}
@@ -625,7 +631,7 @@ public class BaseMapperImpl implements BaseMapper {
SelectCondition selectJoinBuilder = SelectCondition
.joinBuilder(tableName)
.join(joinCondition).build();
return tableMapper.useSql(condition.toCreatCriteria(selectJoinBuilder).build().getSql());
return tableMapper.useSql(condition.toCreatCriteria(selectJoinBuilder,tableName).build().getSql());
}
@Override
@@ -634,7 +640,7 @@ public class BaseMapperImpl implements BaseMapper {
SelectCondition selectJoinBuilder = SelectCondition
.joinBuilder(tableName)
.leftJoin(joinCondition).build();
return tableMapper.useSql(condition.toCreatCriteria(selectJoinBuilder).build().getSql());
return tableMapper.useSql(condition.toCreatCriteria(selectJoinBuilder,tableName).build().getSql());
}
@Override
@@ -643,7 +649,7 @@ public class BaseMapperImpl implements BaseMapper {
SelectCondition selectJoinBuilder = SelectCondition
.joinBuilder(tableName)
.leftJoin(joinCondition).build();
return tableMapper.useSql(condition.toCreatCriteria(selectJoinBuilder).build().getSql());
return tableMapper.useSql(condition.toCreatCriteria(selectJoinBuilder,tableName).build().getSql());
}
@Override
@@ -652,7 +658,7 @@ public class BaseMapperImpl implements BaseMapper {
SelectCondition selectJoinBuilder = SelectCondition
.joinBuilder(tableName)
.rightJoin(joinCondition).build();
return tableMapper.useSql(condition.toCreatCriteria(selectJoinBuilder).build().getSql());
return tableMapper.useSql(condition.toCreatCriteria(selectJoinBuilder,tableName).build().getSql());
}
@Override
@@ -661,12 +667,12 @@ public class BaseMapperImpl implements BaseMapper {
SelectCondition selectJoinBuilder = SelectCondition
.joinBuilder(tableName)
.rightJoin(joinCondition).build();
return tableMapper.useSql(condition.toCreatCriteria(selectJoinBuilder).build().getSql());
return tableMapper.useSql(condition.toCreatCriteria(selectJoinBuilder,tableName).build().getSql());
}
@Override
public List<Map<String, Object>> selectionByCondition(SelectCondition selectCondition, Condition condition) {
return tableMapper.useSql(condition.toCreatCriteria(selectCondition).build().getSql());
return tableMapper.useSql(condition.toCreatCriteria(selectCondition,selectCondition.getTableName()).build().getSql());
}
@Override
@@ -685,20 +691,14 @@ public class BaseMapperImpl implements BaseMapper {
@Override
public List<Map<String, Object>> selectSql(String sql, Map<String, Object> params) {
String dataTypeConfig = getDataConfig();
if (DataUnit.HANGO.equals(dataTypeConfig)) {
params = formatMap(params);
}
params.put("sql", sql);
return sqlSessionTemplate.selectList(TABLE_MAPPER_PACKAGE + "useSql", params);
}
@Override
public PageInfo<Map<String, Object>> selectSqlByPage(String sql, Map<String, Object> params, WebPageInfo webPageInfo) {
String dataTypeConfig = getDataConfig();
if (DataUnit.HANGO.equals(dataTypeConfig)) {
params = formatMap(params);
}
params.put("sql", sql);
if (webPageInfo.isEnableCache()) {
Map<String, Object> finalParams = params;
@@ -724,7 +724,7 @@ public class BaseMapperImpl implements BaseMapper {
String sql = condition.getSql();
sql = "SELECT count(0) as COUNT FROM " + tableName + " " + sql;
condition.setSql(sql);
Map<String, Object> map = selectOne(condition);
Map<String, Object> map = selectOne(condition, tableName);
return Long.parseLong(String.valueOf(map.get("COUNT")));
}
@@ -746,19 +746,23 @@ public class BaseMapperImpl implements BaseMapper {
pkName = "ID";
}
int i;
if (dataTypeConfig.equals(DataUnit.ORACLE) || dataTypeConfig.equals(DataUnit.DAMENG)){
if (dataTypeConfig.equals(DataUnit.ORACLE) || dataTypeConfig.equals(DataUnit.DAMENG)) {
for (Map<String, Object> map : list) {
Object id = getSequence(tableName, pkName);
map.put(pkName, id);
}
i = tableMapper.insertBatch(list,tableName);
}else if(dataTypeConfig.equals(DataUnit.HANGO)) {
i = tableMapper.insertBatch(list, tableName);
} else if (dataTypeConfig.equals(DataUnit.HANGO)) {
getSequence(tableName, pkName);
List<Map<String,Object>> tempList = new ArrayList<>();
for (Map<String, Object> map : list) {
map.put(pkName, "nextval('"+tableName.toLowerCase()+"_seq')");
map = formatMap(map,tableName);
map.put(pkName, "nextval('" + tableName.toLowerCase() + "_seq')");
tempList.add(map);
}
i = tableMapper.insertBatchSeq(list,tableName,pkName);
}else {
list = tempList;
i = tableMapper.insertBatchSeq(list, tableName, pkName);
} else {
i = tableMapper.insertBatch(list, tableName);
}
@@ -830,9 +834,9 @@ public class BaseMapperImpl implements BaseMapper {
try {
String url = druidDataSource.getUrl();
String schema = getSchemaFromJdbcUrl(url);
if(tableMapper.judgeDamengSequenceExist(tableName,schema)>0) {
if (tableMapper.judgeDamengSequenceExist(tableName, schema) > 0) {
id = tableMapper.getSequence(tableName);
}else {
} else {
throw new ServiceException("序列不存在");
}
} catch (Exception e) {

View File

@@ -118,22 +118,26 @@ public class Condition implements Serializable {
return new ConditionBuilder();
}
public static ConditionBuilder creatCriteria(SelectCondition selectCondition) {
return new ConditionBuilder(selectCondition, new HashMap<>());
public static ConditionBuilder creatCriteria(String tableName) {
return new ConditionBuilder(tableName);
}
public static ConditionBuilder creatCriteria(SelectCondition selectCondition, boolean flag) {
return new ConditionBuilder(selectCondition, flag);
public static ConditionBuilder creatCriteria(SelectCondition selectCondition, String tableName) {
return new ConditionBuilder(selectCondition, new HashMap<>(), tableName);
}
public static ConditionBuilder creatCriteria(SelectCondition selectCondition, boolean flag, String tableName) {
return new ConditionBuilder(selectCondition, flag, tableName);
}
public static ConditionBuilder creatCriteria(DataMap dataMap) {
JudesNull(dataMap.getTableName(), "tableName can not be null!");
return new ConditionBuilder(dataMap.getSelectCondition(), new HashMap<>());
return new ConditionBuilder(dataMap.getSelectCondition(), new HashMap<>(), dataMap.getTableName());
}
public static ConditionBuilder creatCriteria(DataMap dataMap, boolean flag) {
JudesNull(dataMap.getTableName(), "tableName can not be null!");
return new ConditionBuilder(dataMap.getSelectCondition(), flag);
return new ConditionBuilder(dataMap.getSelectCondition(), flag, dataMap.getTableName());
}
/**
@@ -150,12 +154,12 @@ public class Condition implements Serializable {
return new ConditionBuilder(this.sql, this.paramMap);
}
public ConditionBuilder toCreatCriteria(SelectCondition selectCondition) {
return new ConditionBuilder(selectCondition, this.sql, this.paramMap);
public ConditionBuilder toCreatCriteria(SelectCondition selectCondition, String tableName) {
return new ConditionBuilder(selectCondition, this.sql, this.paramMap, tableName);
}
public ConditionBuilder toCreatCriteria(DataMap dataMap) {
return new ConditionBuilder(dataMap.getSelectCondition(), this.sql, this.paramMap);
return new ConditionBuilder(dataMap.getSelectCondition(), this.sql, this.paramMap, dataMap.getTableName());
}
public static class ConditionBuilder {
@@ -165,6 +169,7 @@ public class Condition implements Serializable {
private String selecSql = "";
private String conditionSql = "";
private String tableName = "";
private int lrn = 0;
@@ -195,23 +200,30 @@ public class Condition implements Serializable {
public ConditionBuilder() {
}
public ConditionBuilder(String tableName) {
this.tableName = tableName;
}
public ConditionBuilder(boolean flag) {
this.flag = flag;
}
public ConditionBuilder(SelectCondition selectCondition, Map<String, Object> paramMap) {
public ConditionBuilder(SelectCondition selectCondition, Map<String, Object> paramMap, String tableName) {
this.selectCondition = selectCondition;
this.selecSql = selectCondition.getSql();
this.paramMap = paramMap;
this.tableName = tableName;
}
public ConditionBuilder(SelectCondition selectCondition, boolean flag) {
public ConditionBuilder(SelectCondition selectCondition, boolean flag, String tableName) {
this.flag = flag;
this.selectCondition = selectCondition;
this.selecSql = selectCondition.getSql();
this.tableName = tableName;
}
public ConditionBuilder(SelectCondition selectCondition, String sql, Map<String, Object> paramMap) {
public ConditionBuilder(SelectCondition selectCondition, String sql, Map<String, Object> paramMap, String tableName) {
this.tableName = tableName;
spliteSql(sql);
this.selectCondition = selectCondition;
this.selecSql = selectCondition.getSql();
@@ -240,15 +252,18 @@ public class Condition implements Serializable {
this.selecSql = selectCondition.getSql();
}
private Object formatValue(Object value) {
// if(value instanceof String) {
private Object formatValue(String key, Object value) {
Map<String, String> columnTypes = TableMetadataCache.getColumnTypesFromCache(this.tableName.toLowerCase());
// 自动转换数据类型
if (value instanceof String && !org.springframework.util.StringUtils.isEmpty(this.tableName) && columnTypes != null) {
value = DataTypeConverter.convertDataTypes(key, (String) value, columnTypes);
// String str = (String)value;
// if (str.matches("-?\\d+")) { // 匹配整数
// return Long.parseLong(str);
// } else if (str.matches("-?\\d*\\.\\d+")) { // 匹配浮点数
// return Double.parseDouble(str);
// }
// }
}
return value;
}
@@ -286,7 +301,7 @@ public class Condition implements Serializable {
}
String sqlKey = "item_" + IdUtil.fastUUID();
this.conditionSql += " " + key + EQUAL + "#{" + sqlKey + "}";
this.paramMap.put(sqlKey, formatValue(value));
this.paramMap.put(sqlKey, formatValue(key, value));
return this;
}
@@ -306,7 +321,7 @@ public class Condition implements Serializable {
}
String sqlKey = "item_" + IdUtil.fastUUID();
this.conditionSql += " " + key + " " + LIKE + " CONCAT('%',#{" + sqlKey + "},'%')";
this.paramMap.put(sqlKey, formatValue(value));
this.paramMap.put(sqlKey, formatValue(key, value));
return this;
}
@@ -326,7 +341,7 @@ public class Condition implements Serializable {
int i = 1;
for (Object object : value) {
String sqlKey = "item_" + IdUtil.fastUUID();
this.paramMap.put(sqlKey, formatValue(object));
this.paramMap.put(sqlKey, formatValue(key, object));
inStr.append("#{").append(sqlKey).append("}");
if (i != value.size()) {
inStr.append(",");
@@ -351,8 +366,8 @@ public class Condition implements Serializable {
public ConditionBuilder between(String key, Object start, Object end) {
String sqlKey = "item_" + IdUtil.fastUUID();
String sqlKey2 = "item_" + IdUtil.fastUUID();
this.paramMap.put(sqlKey, formatValue(start));
this.paramMap.put(sqlKey2, formatValue(end));
this.paramMap.put(sqlKey, formatValue(key, start));
this.paramMap.put(sqlKey2, formatValue(key, end));
this.conditionSql += " " + key + " " + BETWEEN + " #{" + sqlKey + "} " + AND + " #{" + sqlKey2 + "} ";
return this;
}
@@ -369,7 +384,7 @@ public class Condition implements Serializable {
public ConditionBuilder lt(String key, Object value) {
String sqlKey = "item_" + IdUtil.fastUUID();
this.paramMap.put(sqlKey, formatValue(value));
this.paramMap.put(sqlKey, formatValue(key, value));
this.conditionSql += " " + key + " " + LT + " #{" + sqlKey + "} ";
return this;
}
@@ -391,7 +406,7 @@ public class Condition implements Serializable {
public ConditionBuilder notEqual(String key, Object value) {
String sqlKey = "item_" + IdUtil.fastUUID();
this.paramMap.put(sqlKey, formatValue(value));
this.paramMap.put(sqlKey, formatValue(key, value));
this.conditionSql += " " + key + " " + NOT_EQUAL + " #{" + sqlKey + "} ";
return this;
}
@@ -408,7 +423,7 @@ public class Condition implements Serializable {
public ConditionBuilder gt(String key, Object value) {
String sqlKey = "item_" + IdUtil.fastUUID();
this.paramMap.put(sqlKey, formatValue(value));
this.paramMap.put(sqlKey, formatValue(key, value));
this.conditionSql += " " + key + " " + GT + " #{" + sqlKey + "} ";
return this;
}
@@ -425,7 +440,7 @@ public class Condition implements Serializable {
public ConditionBuilder lte(String key, Object value) {
String sqlKey = "item_" + IdUtil.fastUUID();
this.paramMap.put(sqlKey, formatValue(value));
this.paramMap.put(sqlKey, formatValue(key, value));
this.conditionSql += " " + key + " " + LTE + " #{" + value.toString() + "} ";
return this;
}
@@ -442,7 +457,7 @@ public class Condition implements Serializable {
public ConditionBuilder gte(String key, Object value) {
String sqlKey = "item_" + IdUtil.fastUUID();
this.paramMap.put(sqlKey, formatValue(value));
this.paramMap.put(sqlKey, formatValue(key, value));
this.conditionSql += " " + key + " " + GTE + " #{" + value.toString() + "} ";
return this;
}

View File

@@ -0,0 +1,98 @@
package com.taixingyiji.base.module.data.module;
import cn.hutool.core.date.DateUtil;
import java.sql.*;
import java.util.*;
/**
* @author lhc
* @version 1.0
* @className DataTypeConverter
* @date 2025年04月09日 15:17
* @description 描述
*/
public class DataTypeConverter {
// 缓存字段类型信息
// 自动转换数据类型
public static Map<String, Object> convertDataTypes(Map<String, Object> data, Map<String, String> columnTypes) {
Map<String, Object> convertedData = new HashMap<>();
for (Map.Entry<String, Object> entry : data.entrySet()) {
String column = entry.getKey();
Object value = entry.getValue();
String columnType = columnTypes.get(column.toLowerCase());
if (value instanceof String) {
if (columnType != null) {
switch (columnType) {
case "INTEGER":
case "INT":
case "integer":
case "int":
convertedData.put(column, Integer.parseInt(value.toString()));
break;
case "bigint":
case "BIGINT":
convertedData.put(column, Long.parseLong(value.toString()));
break;
case "DATE":
case "DATETIME":
case "TIMESTAMP":
case "date":
case "datetime":
case "timestamp":
convertedData.put(column, DateUtil.parse(value.toString()));
break;
default:
if(columnType.contains("int") || columnType.contains("INT")){
convertedData.put(column, Integer.parseInt(value.toString()));
}else {
convertedData.put(column, value);
}
break;
}
} else {
convertedData.put(column, value);
}
} else {
convertedData.put(column, value);
}
}
return convertedData;
}
public static Object convertDataTypes(String column, String value, Map<String, String> columnTypes) {
Object result;
String columnType = columnTypes.get(column.toLowerCase());
if (columnType != null) {
switch (columnType) {
case "INTEGER":
case "INT":
case "integer":
case "int":
result = Integer.parseInt(value);
break;
case "bigint":
case "BIGINT":
result = Long.parseLong(value);
break;
case "DATE":
case "DATETIME":
case "TIMESTAMP":
case "date":
case "datetime":
case "timestamp":
result = DateUtil.parse(value);
break;
default:
result = value;
break;
}
} else {
result = value;
}
return result;
}
}

View File

@@ -39,6 +39,9 @@ public class SelectCondition implements Serializable {
this.sql = sql;
this.tableName = tableName;
}
public String getTableName(){
return this.tableName;
}
public String getSql() {
return sql;

View File

@@ -0,0 +1,66 @@
package com.taixingyiji.base.module.data.module;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.sql.*;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author lhc
* @version 1.0
* @className TableMetadataCache
* @date 2025年04月09日 15:46
* @description 描述
*/
@Component
public class TableMetadataCache {
// 缓存所有表的字段类型信息
private static final ConcurrentHashMap<String, Map<String, String>> tableColumnTypesCache = new ConcurrentHashMap<>();
final DruidDataSource dataSource;
// 数据库连接池或者数据源
public TableMetadataCache(DruidDataSource druidDataSource) {
this.dataSource = druidDataSource;
}
// 系统初始化时加载所有表的字段类型
@PostConstruct
public void initialize() {
try (Connection connection = dataSource.getConnection()) {
DatabaseMetaData metaData = connection.getMetaData();
ResultSet tables = metaData.getTables(null, null, null, new String[]{"TABLE"});
while (tables.next()) {
String tableName = tables.getString("TABLE_NAME");
Map<String, String> columnTypes = getColumnTypes(connection, tableName);
tableColumnTypesCache.put(tableName, columnTypes);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 获取表的字段类型
private Map<String, String> getColumnTypes(Connection connection, String tableName) throws SQLException {
Map<String, String> columnTypes = new HashMap<>();
DatabaseMetaData metaData = connection.getMetaData();
ResultSet columns = metaData.getColumns(null, null, tableName, null);
while (columns.next()) {
String columnName = columns.getString("COLUMN_NAME");
String columnType = columns.getString("TYPE_NAME");
columnTypes.put(columnName, columnType);
}
return columnTypes;
}
// 获取缓存中的字段类型
public static Map<String, String> getColumnTypesFromCache(String tableName) {
return tableColumnTypesCache.get(tableName);
}
}

View File

@@ -47,30 +47,14 @@ public class WebCondition {
}
public static Condition.ConditionBuilder setSign(WebCondition webCondition, Condition.ConditionBuilder builder, String dataType) {
if (DataUnit.HANGO.equals(dataType)) {
if (webCondition.key.toUpperCase().contains("TIME") && webCondition.value instanceof String) {
try {
webCondition.value = DateUtil.parse((String) webCondition.value);
} catch (Exception ignored) {
}
}
}
switch (webCondition.getSign()) {
case QueryConstants.LIKE: {
return builder.like(webCondition.key, "%" + webCondition.value + "%");
return builder.like(webCondition.key, webCondition.value);
}
case QueryConstants.EQUAL: {
return builder.equal(webCondition.key, webCondition.value);
}
case QueryConstants.BETWEEN: {
if (DataUnit.HANGO.equals(dataType)) {
if (webCondition.key.toUpperCase().contains("TIME") && webCondition.sValue instanceof String) {
try {
webCondition.sValue = DateUtil.parse((String) webCondition.sValue);
} catch (Exception ignored) {
}
}
}
return builder.between(webCondition.key, webCondition.value, webCondition.sValue);
}
case QueryConstants.GT: {

View File

@@ -202,7 +202,7 @@ public class TableServiceImpl implements TableService {
selectJoinBuilder = selectJoinBuilder.join(joinCondition);
}
SelectCondition selectCondition = selectJoinBuilder.build();
Condition.ConditionBuilder builder = Condition.creatCriteria(selectCondition);
Condition.ConditionBuilder builder = Condition.creatCriteria(selectCondition,selectCondition.getTableName());
builder = getQueryBuilder(query, builder);
return baseMapper.selectByCondition(builder.build(), webPageInfo);
} else {