利用反射實現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對象組成的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM