开发中常见问题与特殊问题记录
来源:互联网 发布:网络诋毁公司如何处理 编辑:程序博客网 时间:2024/05/02 04:42
1.常见问题
1.1 使用spring遇到的问题
1.1.1 使用spring JDBCTemplate + spring-boot-web遇到的问题
- 使用jdbcTemplate的queryForObject方法的时候,如果查询的结果大于一就会报错,最好使用queryForList方法查询,查询出来的数据结构为
List<Map<String,String>>
的形式 - 在Controller层使用自定义Modle(如:user)接收前端传过来的参数的时候,如果使用jdbcTemplate的update方法更新数据(更行全部的属性,其中存在null属性)的话,参数为null会报错,不知道是不是c3po连接池的问题(该问题现在没有遇到好的解决方案)
- 当相同类的对象的值需要覆盖的情况下,如:
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
- 开发中常见问题与特殊问题记录
- 【问题汇总】开发中常见问题的解决办法
- 【常见问题】web开发中浏览器缓存问题
- VirtualBox常见问题记录与解决
- pykafka常见问题分析与记录
- hadoop 配置中常见问题记录
- 开发中常见问题集锦
- 开发中常见问题集锦
- 开发中常见问题集锦
- 开发中常见问题集锦
- 开发中常见问题集锦
- 开发中常见问题集锦
- android 开发中常见问题
- 开发中GridView常见问题
- 开发中常见问题集锦
- eclipse开发中常见问题
- java开发中常见问题
- [jsp]常见问题--Java 开发中遇到的乱码问题
- eclipse快捷键用法
- 时间、日期的常识
- 使用npm安装一些包失败了的看过来(npm国内镜像介绍),亲测可用,非常吊!
- 【FontsManager】安卓一行代码实现自定义字体替换
- 第一次程序慢
- 开发中常见问题与特殊问题记录
- 洛谷 2672
- python实现基于向量算法的的路由协议(RIP)
- 文件的压缩与打包
- LightOJ-1058-math
- app.gradle中配置打包秘钥
- newScheduledThreadPool延时任务线程池,实现原理
- 参考文献对齐的设置方法
- 一天一条Linux指令-declare