之前做的一个微信端的项目:项目有一个需求是修改数据的时候,将进行修改了的数据记录下来,然后修改了多少数据加一定的积分。最近做了个项目:项目的需求是对一张单子的某几项进行修改,然后和修改之前的单子进行比较,展示修改了哪些内容,这两张单子都是可以在数据库不同表查出来的,但是这两张表的数据结构是相同的。代码是这样写的:第一个是主要方法,第二个是部分实体类。其实主要就是运用了反射。
public ListqueryDiffByID(V_FreightPolicy freightPolicy, V_FreightPolicy freightPolicyLong) throws Exception {
LOG.info(BaseLogInfo.formatLOGINFO("111", "queryDiffByID", "初始化"));
List list = new ArrayList();
List listDiff = new ArrayList();
Class clazz = Class.forName("com.ccsee.ecargo.model.db.V_FreightPolicy");
// 获取该类的所有属性字段V_FreightPolicy
Field[] fields = clazz.getDeclaredFields();
// 解析字段注解
for (Field field : fields) {
if (field.isAnnotationPresent(AnnotationField.class)) {
AnnotationField annoField = field.getAnnotation(AnnotationField.class);
EndorseValue keyValue = new EndorseValue();
keyValue.setKeyName(annoField.fieldValue());
keyValue.setKey(field.getName().toUpperCase());
list.add(keyValue);
}
}
Mapmap = new HashMap();
Method[] methods = clazz.getMethods();// 类的方法
for (Method method : methods) {
String methodName = method.getName();
if (methodName.startsWith("get") && !methodName.equals("getClass")) {// 如果方法名以get开头
Object value = method.invoke(freightPolicy);// 调用方法,并打印返回值
if (value != null) {
map.put(methodName.substring(3).toUpperCase().toString(), value.toString());
}
}
}
for (Method method : methods) {
String methodName = method.getName();
if (methodName