两张表结构一样,查询使用的对象也一样,需要在程序里面 聚合一下,如果一个个属性get,写死到代码里面因为属性太多,代码肯定一堆get set,用反射获取属性方法后,再相加,并set到第一个对象中
public static void sumFieldValue(UserTransFileNumStatistics utfns, UserTransFileNumStatistics utfns1) {
Class utfnsClazz = utfns.getClass();
Class utfns1Clazz = utfns1.getClass();
Field[] utfnsFields = utfnsClazz.getDeclaredFields();
for (int i = 0; i < utfnsFields.length; i++) {
Field utfnsField = utfnsFields[i];
try {
utfnsField.setAccessible(true);
//相加
utfnsField.get(utfns);
Class type = utfnsField.getType();
String fieldName = utfnsField.getName();
if (!"creatorId".equals(fieldName) && !"userType".equals(fieldName)) {
try {
//int 或者 long类型 相加
Method getVal = utfnsClazz.getMethod("get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1));
if (type.getName().equals("java.lang.Long")) {
Method setVal = utfnsClazz.getMethod("set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1), Long.class);
Long longVal = (Long) getVal.invoke(utfns);
Long longVal1 = (Long) getVal.invoke(utfns1);
if (longVal != null && longVal1 != null) {
setVal.invoke(utfns, longVal1 + longVal);
}
} else if (type.getName().equals("java.lang.Integer")) {
Method setVal = utfnsClazz.getMethod("set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1), Integer.class);
Integer intVal = (Integer) getVal.invoke(utfns);
Integer intVal1 = (Integer) getVal.invoke(utfns1);
if (intVal != null && intVal1 != null) {
setVal.invoke(utfns, intVal1 + intVal);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
}