**
分享一个实用工具类
**
利用反射 给实体类赋默认值。具体代码如下:
/**
* 使用反射给实体类赋值(默认值)
* insert update会报null异常,为空时不能插入和更新
*/
public static Object getObjDefault(Object obj) {
// 得到类对象
Class objCla = obj.getClass();
Field[] fs = objCla.getDeclaredFields();
for (int i = 0; i < fs.length; i++) {
Field f = fs[i];
// 设置些属性是可以访问的
boolean isStatic = Modifier.isStatic(f.getModifiers());
if (isStatic) {
continue;
}
// 设置些属性是可以访问的
f.setAccessible(true);
try {
// 得到此属性的值
Object val = f.get(obj);
// 得到此属性的类型
String type = f.getType().getTypeName();
if (Objects.equals(type, String.class.getTypeName()) && Objects.equals(val, null)) {
// 给属性设值
f.set(obj, null);
} else if ((Objects.equals(type, int.class.getTypeName()) || Objects.equals(type, Integer.class.getTypeName()) || Objects.equals(type, double.class.getTypeName())) && Objects.equals(val, null)){
f.set(obj, 0);
} else if ((Objects.equals(type, long.class.getTypeName()) || Objects.equals(type, Long.class.getTypeName()) && Objects.equals(val, null))) {
f.set(obj, 0L);
} else if (Objects.equals(type, Date.class.getTypeName()) && Objects.equals(val, null)) {
f.set(obj, Date.valueOf("1970-01-01"));
} else if (Objects.equals(type, Timestamp.class.getTypeName()) && Objects.equals(val, null)) {
f.set(obj, Timestamp.valueOf("1970-01-01 00:00:00"));
} else if (Objects.equals(type, BigDecimal.class.getTypeName()) && Objects.equals(val, null)) {
f.set(obj, new BigDecimal(BigDecimal.ZERO.intValue()));
}
} catch (Exception e) {
//自定义异常
throw new BaseException("属性赋默认值出错:{}", e);
}
}
return obj;
}
欢迎讨论