博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用反射实现JavaBean的自动赋值
阅读量:4360 次
发布时间:2019-06-07

本文共 1645 字,大约阅读时间需要 5 分钟。

最近开发公司的一个项目,因项目不是很大的项目,所以仅仅采用了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对象组成的。

转载于:https://www.cnblogs.com/ruiati/p/3406619.html

你可能感兴趣的文章
win10+vs2015+opencv3.0 x86/x64配置(debug+release)
查看>>
ES6箭头函数-2
查看>>
BZOJ4499: 线性函数
查看>>
HDU 4941 Magical Forest
查看>>
Java LinkedList特有方法程序小解 && 使用LinkedList 模拟一个堆栈或者队列数据结构。...
查看>>
putty network error:software caused connection abort
查看>>
存储过程 <3> 和函数的区别
查看>>
高级service之ipc ADIL用法
查看>>
Django框架-基础篇
查看>>
Leetcode: Binary Tree Maximum Path Sum
查看>>
通过虚拟环境创建并开始一个django
查看>>
关于 input[type="button"] , button
查看>>
Android ViewDragHelper全然解析 自己定义ViewGroup神器
查看>>
微信遇到的几个小问题
查看>>
c++ 基础 const char* 转 char*
查看>>
usaco-2.1-hamming-pass
查看>>
使用Spring Boot开发Web项目(二)之添加HTTPS支持
查看>>
2014年工作中遇到的20个问题:1-20
查看>>
热烈庆祝UE4完全免费Free---GitHub上源码的关联方法
查看>>
题目1207:质因数的个数
查看>>