文章标题
2016-12-12 16:52
267 查看
利用java映射自动封装javabean代码块,及注意事项
public static List《object》 getBeanFormCacheRowSet(Class clazz,ResultSet rest) {List《object》 result = new ArrayList《object》();//List《object》
ResultSetMetaData md;
try {
md = rest.getMetaData(); //获取metadata
int columCount = md.getColumnCount(); //获取set行数:即属性的个数
Object obj = null; while (rest.next()) { //创建实例 obj = clazz.newInstance(); for(int i=1;i<=columCount;i++){ //按照对象属性数遍历,注意i的范围 if(rest.getObject(i) == null){ //排除null continue; } //格式转化 String className = md.getColumnClassName(i); if("java.sql.Timestamp".equals(className)||"java.sql.Date".equals(className)){ className = "java.sql.Timestamp"; }else if("java.sql.Time".equals(className)){ className = "java.lang.String"; } else if("java.lang.Byte".equals(className)){ className = "java.lang.Integer"; } String methodName = "set"+md.getColumnName(i).substring(0,1).toUpperCase() +md.getColumnName(i).substring(1); try{ clazz.getMethod(methodName,Class.forName(className)).invoke(obj, rest.getObject(i)); } catch(NoSuchMethodException e){ //System.out.println("特殊类型字段导致表字段与JavaBean属性不对应!没有找到参数类型是["+className +"]的SETER方法:"+ methodName); continue; } } result.add(obj); } } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } return result; }
}