[下]业务数据变动日志记录的一次需求

阅读: 评论:0

[下]业务数据变动日志记录的一次需求

[下]业务数据变动日志记录的一次需求

本文由黑壳博客原创

本文来源[[下]业务数据变动日志记录的一次需求]()

今日一问

群友提问,怎么用 39.74 过半个月?

欢迎评论区回答,会在群内随机摘取问题or段子


正文

紧接着上次的话题来聊[[上]业务数据变动日志记录的一次需求]()

上次因为项目需求,要做一个记录日志的功能,其实功能还蛮简单的造一个小工具类就可以了。

这篇文章主要就是把上篇文章的代码改造成工具类,方便后期有相同需求的人,不用在手写了~

那我们开始直接进入话题

  1. 首先第一步给bean加载完我们自定义的注解以后,进行工具类调用,如果你不知道自定义注解,请阅读[[上]业务数据变动日志记录的一次需求]() 。
  2. 把工具类搬上来 BeanUtil

import    java.util.HashMap;
import  flect.Field;
import  flect.Method;
import  flect.Modifier;
import  java.util.List;
import  java.util.Map;/*** 本工具类目的是针对两个Bean内容做比较* 效果是为了日志记录方便* 例如日志内容 "参数名:xxx, 变动前:xxx -> 变动后:xxx;......"** Created by kzyuan on 2019-09-05 11:28*/
public class BeanUtil {private static UserBean userBeanNew;private static UserBean userBeanOld;public static void main(String[] args)  {// 创建User Bean对象,并设值setUserBean();//数据对比返回结果集Map<String,String> resultMap = dataComparison(userBeanNew,userBeanOld);}// 创建User Bean对象,并设值private static void setUserBean() {userBeanOld = new UserBean();userBeanOld.setId("1");userBeanOld.setName("壳叔");userBeanOld.setAge("35");userBeanOld.setEmail("keshu@bhusk");userBeanNew = new UserBean();userBeanNew.setId("2");userBeanNew.setName("kk 壳");userBeanNew.setAge("36");userBeanNew.setEmail("kk@bhusk");}// 遍历 Beanprivate static Map<String,DataLogger> traversalBean(Object obj) throws Exception {//创建Map容器Map<String,DataLogger> objMap = new HashMap<String, DataLogger> ();//开始记录容器值Field[] fields = Class().getDeclaredFields();for (Field field : fields) {DataLogger dataLogger = new DataLogger();String mod = Modifiers());System.out.println("mod = "   mod);dataLogger.setMod(mod);// 跳过静态属性if (mod.indexOf("static") != -1) {continue;}// 取得注解的设置的属性值SetFieldAttribute setField = Annotation(SetFieldAttribute.class);if (setField != null) {String fieldName = setField.fieldName();String fieldType = setField.fieldType();dataLogger.setFieldName(setField.fieldName());dataLogger.setFieldType(setField.fieldType());System.out.println("注解的属性 fieldName = "   fieldName);System.out.println("注解的属性 fieldType = "   fieldType);String getMethod = "get"   Name().substring(0, 1).toUpperCase()Name().substring(1);System.out.println("User Bean 属性的Get方法名 getMethod = "   getMethod);dataLogger.setMethod(getMethod);Class[] methodParam = null;Object[] params = {};Object retVal = Class().getMethod(getMethod, methodParam).invoke(obj, params);if (fieldType.equals("list")) {
//                    List<String> list = (List<String>) retVal;
//                    if(null == list) {continue;}
//                    int i = 1;
//                    for (String favourite : list ) {
//                        System.out.println("User Bean 属性的值 "   Name()   " : "   i   " = "   favourite);
//                        i  ;
//                    }} else {// 取得Bean属性的值System.out.println("User Bean 属性的值 "   Name()   " = "   retVal);dataLogger.setFieldValue(retVal);}}objMap.Name(), dataLogger);}return objMap;}/*** 类数据对比方法 会返回一个map 会存储发生变动的日志* @param newObj 变动后的bean* @param oldObj 变动前的bean*/private static Map<String,String> dataComparison(Object newObj,Object oldObj) {//结果容器Map<String,String> resultMap = new HashMap<String, String>();try {/*** 整理Bean分析数据*/Map<String,DataLogger> newObjMap = aversalBean(newObj);Map<String,DataLogger> oldObjMap = aversalBean(oldObj);/*** 开始分析两组map数据*/for (Map.Entry<String, DataLogger> entry : Set()) {/*** 判断两组值数据*/if (Value().getFieldValue() != (Key()).getFieldValue()) {/*** 记录日志的结果*/
//                    resultMap.Key(), " field name: "   Value().getFieldName()  
//                            " , new field value: "   Value().getFieldValue()  
//                            " -> old field value: "   (Key()).getFieldValue());resultMap.Key(), " 发生列名: "   Value().getFieldName()  " , 变动后内容值: "   Value().getFieldValue()  " -> 变动前内容值: "   (Key()).getFieldValue());}}} catch (Exception e) {e.printStackTrace();}return resultMap;}
}/*** 用于存储解析后的bean*/
class DataLogger {private String mod;/*** 字段名*/private String fieldName;/*** 字段内容*/private Object fieldValue;/*** 字段类型*/private String fieldType;/*** 属性的Get方法名*/private String method;public String getMod() {return mod;}public void setMod(String mod) {d = mod;}public String getFieldName() {return fieldName;}public void setFieldName(String fieldName) {this.fieldName = fieldName;}public Object getFieldValue() {return fieldValue;}public void setFieldValue(Object fieldValue) {this.fieldValue = fieldValue;}public String getFieldType() {return fieldType;}public void setFieldType(String fieldType) {this.fieldType = fieldType;}public String getMethod() {return method;}public void setMethod(String method) {hod = method;}
}

  1. 具体调用方式参考工具类的main方法~ 你会得到一个map结果集,最后根据自己需要自行处理优化结果集~~ 其它的我可不管咯
  2. 那本篇结束,我该去泡泡面了。
本篇提到的代码文件,已经均提交到Github

地址->

About

欢迎在评论写下你的程序员趣事~~

欢迎加入我们的小组织 ,大家都叫壳叔,期待你的到来。

我们也会定期在群内聊天记录中抽取有趣的事情或者小问题。

欢迎关注公众号


这是我们的Group 不定期开放 但是有定期的红包

黑壳家根据地 Q群:200408242

本文发布于:2024-02-04 21:53:14,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170717254559942.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:变动   需求   业务   数据   日志
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23