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对象组成的。

  • 相关阅读:
    删除ubuntu自带软件 及 WPS 安装(转)WPS字体已备份
    youtube-dl 下载爱奇异视频 不能删除
    電影嘗試三 webtorrent-desktop在線觀看電影magnet
    wget 命令
    什么是X window
    查看磁盘分区
    root
    错误:org.hibernate.exception.GenericJDBCException: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA ....
    Git 版本回退
    oracle密码过期问题解决
  • 原文地址:https://www.cnblogs.com/ruiati/p/3406619.html
Copyright © 2011-2022 走看看