Java反射的一些应用

1、这是一个把JDBC查询的结果集封装成实体类的方法

 

/**
     * 将JDBC查询的结果集封装成指定实体类对象的集合
     * @param paramList 查询的结果集,这种格式
     * @param entityClass 要封装进的实体类
     * @param <T>
     * @return
     */
public static  <T>List<T> getJdbcList(List<List<Column>>  paramList,Class<T> entityClass){        
        //校验集合是否为空,是否有元素
        if(null!=paramList && paramList.size()>0){
            
            //先创建返回的结果,用于封装对象
            List<T> returnList = new ArrayList<>();
            //循环
            for (List<Column> columnList:paramList){
                //执行
                T object = getJdbcOne(columnList, entityClass);
                returnList.add(object);
            }
            return returnList;
        }
        return null;
    }


public static <T> T getJdbcOne(List<Column> columnList, Class<T> entityClass) {
        if (null != columnList && columnList.size() > 0) {
            try {
                //创建该实体类的一个新的对象
                T object = entityClass.getConstructor().newInstance();
                
                //遍历
                for (Column<String> column : columnList) {
                    //获取字段名
                    String columnName = column.getColumnName();
                    //获取字段的值
                    String columnValue = column.getVal()==null?null:String.valueOf(column.getVal());

                    try {
                        //获取该类有无该字段,如果没有,抛出异常
                        Field field = entityClass.getDeclaredField(columnName);
                        //取消访问检查,对于私有字段可以设置值
                        field.setAccessible(true);
                        //赋值
                        field.set(object, columnValue);
                    }catch (Exception e){
                        continue;
                    }

                }

                return object;

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return null;
}

2、

/**
 *  将Storm平台下的MongoDB查询的结果集封装成实体类对象
 * @param map
 * @param entityClass
 * @param <T>
 * @return
 */
public static <T> T getMongoOne(Map map, Class<T> entityClass) {
    if (null != map && map.size() > 0) {
        try {
            //处理Mongo查询数据的oid字段
            JSONObject jsonId = (JSONObject) map.get("_id");
            String id = jsonId.getString("$oid");
            map.put("id", id);
            map.remove("_id");

            //创建新的对象
            T object = entityClass.getConstructor().newInstance();

            //遍历Map
            Set<Map.Entry> entrySet = map.entrySet();
            if(!entrySet.isEmpty()){
                for (Map.Entry<String, String> entry : entrySet) {
                    //获取键
                    String key = entry.getKey();
                    try {
                        Field field = entityClass.getDeclaredField(key);
                        field.setAccessible(true);
                        String value = entry.getValue();
                        field.set(object, value);
                    }catch (Exception e){
                        continue;
                    }

                }
            }

            return object;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return null;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值