开发中常见问题与特殊问题记录

来源:互联网 发布:网络诋毁公司如何处理 编辑:程序博客网 时间:2024/05/02 04:42

1.常见问题

1.1 使用spring遇到的问题

1.1.1 使用spring JDBCTemplate + spring-boot-web遇到的问题

  1. 使用jdbcTemplate的queryForObject方法的时候,如果查询的结果大于一就会报错,最好使用queryForList方法查询,查询出来的数据结构为List<Map<String,String>>的形式
  2. 在Controller层使用自定义Modle(如:user)接收前端传过来的参数的时候,如果使用jdbcTemplate的update方法更新数据(更行全部的属性,其中存在null属性)的话,参数为null会报错,不知道是不是c3po连接池的问题(该问题现在没有遇到好的解决方案)
  3. 当相同类的对象的值需要覆盖的情况下,如:
User user1 = new User();user1.setName("tom")user1.setPassword("000");...User user2 = new User();user2.setName("tom11111")user2.setPassword("00000000");user2.setLove("fengjie");....

现在想使用user2的值覆盖user1的值,由于java中没有JavaScript中的merge方法,所以需要自己实现,现在想到的是使用反射的方式来实现,不过觉得代码存在很大的问题,现在只是记录这个问题,将来技术牛比了再寻找更好的解决方案,实现的代码如下:

/** *  */package com.tools;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.List;import java.util.Map;/** * @author lcl * @createDate 2016年11月3日上午11:42:11 * 用来合并同类对象的属性的工具类 */public class MergeObjectUtils {    public static Object merge(Object formerObject, Object updateObject) {        try {            Field[] o1Fields = formerObject.getClass().getDeclaredFields();            for (Field o1Field : o1Fields) {                if (!o1Field.getName().equals("serialVersionUID")) {//因为serialVersionUID没有get 和 set 方法,去除该属性                    String fName = o1Field.getName();                    Method m = formerObject.getClass().getMethod("get" + toUpperCaseFirstOne(fName));                    Object value1 = m.invoke(formerObject);                    Object value2 = m.invoke(updateObject);                    if (value2 != null && value1 != value2) {                        if (value2 instanceof String) {//属性为字符串的形式                            m = formerObject.getClass().getMethod("set" + toUpperCaseFirstOne(fName), String.class);                            m.invoke(formerObject, value2);                        }                        if (value2 instanceof Integer) {                            m = formerObject.getClass().getMethod("set" + toUpperCaseFirstOne(fName), Integer.class);                            m.invoke(formerObject, value2);                        }                        if (value2 instanceof Long) {                            m = formerObject.getClass().getMethod("set" + toUpperCaseFirstOne(fName), Long.class);                            m.invoke(formerObject, value2);                        }                        if (value2 instanceof List) {                            m = formerObject.getClass().getMethod("set" + toUpperCaseFirstOne(fName), List.class);                            m.invoke(formerObject, value2);                        }                        if (value2 instanceof Map) {                            m = formerObject.getClass().getMethod("set" + toUpperCaseFirstOne(fName), Map.class);                            m.invoke(formerObject, value2);                        }                    }                }            }        } catch (Exception e) {            e.printStackTrace();        }        return formerObject;    }    private static String toUpperCaseFirstOne(String fName) {        return fName.replaceFirst(fName.charAt(0) + "", (fName.charAt(0) + "").toUpperCase());    }}一看这个代码就是存在很大的问题的

2.特殊问题

0 0
原创粉丝点击