zoukankan      html  css  js  c++  java
  • 利用反射实现JavaBean的自动赋值

    最近开发公司的一个项目,因项目不是很大的项目,所以仅仅采用了spring MVC框架,但是数据库很多表中的字段至少15个,这样当每次将数据库表中的数据取出来放入javabean中时,写setXXX方法总是要写很多遍,而且容易出错,很是麻烦,所以采用了反射和泛型的方式,自动给javabean赋值。当然有个缺点,就是数据库中的字段名要跟javabean中的字段名相同,并且字段类型要相同。如果想做成更好的话,可以采用配置文件的方式,在此就不写了。代码如下:

    // 根据传过来的对象和ResultSet自动给对象赋值
        public static <T> List<T>  getBean(ResultSet rs, T object) throws Exception {
            Class<?> classType = object.getClass();
            ArrayList<T> objList = new ArrayList<T>();
            //SqlRowSet srs = jdbcTemplate.queryForRowSet(sql);
            Field[] fields = classType.getDeclaredFields();//得到对象中的字段
            while (rs.next()) {
                //每次循环时,重新实例化一个与传过来的对象类型一样的对象
                T objectCopy = (T) classType.getConstructor(new Class[] {}).newInstance(new Object[] {});
                for (int i = 0; i < fields.length; i++) {
                    Field field = fields[i];
                    String fieldName = field.getName();
                    Object value = null;
                    //根据字段类型决定结果集中使用哪种get方法从数据中取到数据
                    if (field.getType().equals(String.class)) {
                        value = rs.getString(fieldName);
                        if(value==null){
                            value="";
                        }
                    }
                    if (field.getType().equals(int.class)) {
                        value = rs.getInt(fieldName);
                    }
                    if (field.getType().equals(java.util.Date.class)) {
                        value = rs.getDate(fieldName);
                    }
                    // 获得属性的首字母并转换为大写,与setXXX对应
                    String firstLetter = fieldName.substring(0, 1).toUpperCase();
                    String setMethodName = "set" + firstLetter
                            + fieldName.substring(1);
                    Method setMethod = classType.getMethod(setMethodName,
                            new Class[] { field.getType() });
                    setMethod.invoke(objectCopy, new Object[] { value });//调用对象的setXXX方法
                }
                
                objList.add(objectCopy);
            }
            if(rs != null){
                rs.close();
            }
            return objList;
        }

    上面方法的使用如类为User:

    User user = new  User();

    List<User> list = getgetBean(resultSet , user);//将得到list集合,里面是有user对象组成的。

  • 相关阅读:
    实验室网络管理记
    mondrian schema一个简单的例子
    powerdesigner数据库设计导入oracle9i
    linux 的mount命令
    [转]moto面试题
    Oracle数据库服务解释
    数据聚集技术在mondrian中的实现
    发现台湾的mondrian资料 + pentaho截图
    一个封装比较完整的FTP类(转载)
    oracle 网页管理工具登录接口
  • 原文地址:https://www.cnblogs.com/ruiati/p/3406619.html
Copyright © 2011-2022 走看看