项目代码理解

76 阅读1分钟

ModelInsMDataDao过程解读

obj为实体类

主要用于判断是否需要模糊查询,至于他是什么时候加上%%的,那就是他自己封装的mybatis的框架了。我是不知道了

public static <T> T propertyDeal(T obj, Map<String, Integer> dealColMap) {
    if (obj == null) {
        return obj;
    } else {
        Object tempObj = null;

        try {
        
            //获取obj实体类的一个对象
            
            tempObj = obj.getClass().newInstance();
        } catch (Exception var15) {
            log.error(ExceptionUtil.stacktraceToString(var15));
            throw StatusCodeExceptionFactory.createStatusCodeException(StatusCodeConstantData.PUB_PARAM_ERROR, ExceptionUtil.getMessage(var15));
        }
        
        //把obj对象的值赋给tempObj常用于po转换为vo。能省去很多set,get方法.在这里实际上就是赋值了一个operUser=admin给tempObj。说明是个管理员用户
        
        BeanUtils.copyProperties(obj, tempObj);
        Map<String, Integer> colMap = new HashMap();
        Set<Entry<String, Integer>> entrySet = dealColMap.entrySet();
        Iterator var5 = entrySet.iterator();

        int var9;
        while(var5.hasNext()) {
            Entry<String, Integer> entry = (Entry)var5.next();
            
            //循环取出所有key: name,no,
            
            String[] colNameArr = ((String)entry.getKey()).split(",");
            String[] var8 = colNameArr;
            var9 = colNameArr.length;

            for(int var10 = 0; var10 < var9; ++var10) {
                String colName = var8[var10];
                //key变大写
                colMap.put(colName.toUpperCase(), entry.getValue());
            }
        }

//第一轮执行colMap为 NO 1
//第二轮 NO 1  NAME 2

//反射查出所有tempObj有的字段。fieldsArr包括字段名,root等等

        Field[] fieldsArr = tempObj.getClass().getDeclaredFields();
        
        //这个对象bw记住可以获取字段的值,set和get方法。详情见下面的网站
        
        BeanWrapper bw = new BeanWrapperImpl(tempObj);
        Field[] var18 = fieldsArr;
        int var19 = fieldsArr.length;

        for(var9 = 0; var9 < var19; ++var9) {
            Field field = var18[var9];
            Object propertyValue = null;
            Integer dealType = -1;

            try {
            
            //第一轮循环反射是获取类的字段所以包括了static的字段
//private static final long serialVersionUID = 1L;。由于map中不包含所以为null
            
                dealType = (Integer)colMap.get(field.getName().toUpperCase());
                
                //这里第一轮循环propertyValue也为null。也为反射有static字段serialVersionUID。而bw获取的是对象字段
                
                propertyValue = bw.getPropertyValue(field.getName());
            } catch (Exception var14) {
            }

            if (dealType == null) {
                dealType = -1;
            }

            if (propertyValue != null && propertyValue instanceof String && StrUtil.isNotEmpty((String)propertyValue) && dealType != -1) {
            //最后如果1表示,不支持模糊查询
                if (dealType == 1) {
                    bw.setPropertyValue(field.getName(), StringUtil.changeFormat((String)propertyValue, "'"));
                }
                
                //支持模糊查询
                if (dealType == 2) {
                    bw.setPropertyValue(field.getName(), "%" + propertyValue + "%");
                }

                //支持右模糊
                if (dealType == 3) {
                    bw.setPropertyValue(field.getName(), propertyValue + "%");
                }
                   
                 //支持左模糊
                if (dealType == 4) {
                    bw.setPropertyValue(field.getName(), "%" + propertyValue);
                }
            }
        }

        return tempObj;
    }
}

BeanWrapper解析 - 知乎 (zhihu.com)