feat: add highgo data converter
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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: {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user