perf: SQLBot 数据源接口 行列权限机制优化

This commit is contained in:
fit2cloud-chenyw
2025-09-08 17:25:29 +08:00
committed by fit2cloud-chenyw
parent c4fcd23f8b
commit ee1870a172
4 changed files with 149 additions and 30 deletions

View File

@@ -108,16 +108,75 @@ public class BeanUtils {
// 查找Map中对应的key支持驼峰和下划线
Object value = findValueInMap(map, propertyName);
// 只有当值存在且有写入方法时才设置属性
if (value != null && descriptor.getWriteMethod() != null) {
descriptor.getWriteMethod().invoke(bean, value);
try {
// 可选:添加类型转换逻辑来处理类型不匹配的情况
Object convertedValue = convertTypeIfNeeded(value, descriptor.getPropertyType());
descriptor.getWriteMethod().invoke(bean, convertedValue);
} catch (IllegalArgumentException e) {
// 类型不匹配时跳过该属性,而不是抛出异常
System.err.println("类型不匹配跳过属性: " + propertyName + ", 期望类型: " +
descriptor.getPropertyType() + ", 实际类型: " + value.getClass());
}
}
}
return bean;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Map转Bean失败", e);
}
}
private static Object convertTypeIfNeeded(Object value, Class<?> targetType) {
if (value == null) {
return null;
}
// 如果类型匹配,直接返回
if (targetType.isInstance(value)) {
return value;
}
// 添加常见的类型转换逻辑
try {
if (targetType == String.class) {
return value.toString();
} else if (targetType == Integer.class || targetType == int.class) {
if (value instanceof Number) {
return ((Number) value).intValue();
} else {
return Integer.parseInt(value.toString());
}
} else if (targetType == Long.class || targetType == long.class) {
if (value instanceof Number) {
return ((Number) value).longValue();
} else {
return Long.parseLong(value.toString());
}
} else if (targetType == Double.class || targetType == double.class) {
if (value instanceof Number) {
return ((Number) value).doubleValue();
} else {
return Double.parseDouble(value.toString());
}
} else if (targetType == Boolean.class || targetType == boolean.class) {
if (value instanceof Boolean) {
return value;
} else {
return Boolean.parseBoolean(value.toString());
}
}
// 可以继续添加其他类型的转换...
} catch (Exception e) {
// 转换失败时返回原值,让后续逻辑处理
System.err.println("类型转换失败: " + value + " to " + targetType);
}
return value; // 无法转换时返回原值
}
private static Object findValueInMap(Map<String, Object> map, String propertyName) {
Object value = map.get(propertyName);
if (value != null) return value;