JDBC查询所得的ResultSet结果集映射给实体类集合list

public class JdbcResultSetFactory {

    public static <T> List<T> getObject(Class<T> classname, ResultSet resultSet) {
        //resultSet为空,直接丢一个空类型
        if (resultSet == null || classname == null) {
            return null;
        }
        Object o = null;
        ArrayList list = new ArrayList();
        try {
            while (resultSet.next()) {
                Constructor[] declaredConstructors = classname.getDeclaredConstructors();
                Constructor constructor = declaredConstructors[0];
                //创建每一个实例对象
                //如果是构造方法时,直接创建对象
                if (constructor.getParameterCount() == 0) {
                    constructor.setAccessible(true);
                    o = constructor.newInstance();
                } else {
                    Object[] objects = new Object[constructor.getParameterCount()];
                    Class[] parameterTypes = constructor.getParameterTypes();
                    for (int i = 0; i < objects.length; i++) {
                        //获得每一个属性的名字
                        String typeName = parameterTypes[i].getTypeName();
                        if ("String".equals(typeName)) {
                            objects[i] = "";
                        }
                        if ("int".equals(typeName)) {
                            objects[i] = 0;
                        }
                        //......
                    }
                    o = constructor.newInstance(objects);
                }
                //获得所有属性
                Field[] fields = classname.getDeclaredFields();
                int len = fields.length;
                for (int i = 0; i < len; i++) {
                    fields[i].setAccessible(true);
                    //获得每个属性的名字
                    String tempName = fields[i].getName();
                    //通过tempName获得rs当前列的值
                    Object value = resultSet.getObject(tempName);
                    //设置这个对象的这个属性的值
                    fields[i].set(o, value);
                }
                //每个对象,加入到集合中
                list.add(o);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        return list;
    }


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值