Result映射成对象和List

package com.com.dbhelper;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Manager {

    public static List toList(ResultSet rs) throws SQLException {

        List list = new ArrayList();

        ResultSetMetaData md = rs.getMetaData();

        int columnCount = md.getColumnCount();

        while (rs.next()) {

            Map rowData = new HashMap();

            for (int i = 1; i <= columnCount; i++) {
                rowData.put(md.getColumnName(i), rs.getObject(i));
            }

            list.add(rowData);

        }

        return list;

    }


    public static List resultSetToList(ResultSet rs,Class cls)
    {
        List list = new ArrayList();
        try
        {
            //获取数据库表结构
            ResultSetMetaData meta=rs.getMetaData();
            Object obj=null;
            while(rs.next())
            {
                //获取formbean实例对象
                obj=Class.forName(cls.getName()).newInstance();
                //循环获取指定行的每一列的信息
                for(int i=1;i<=meta.getColumnCount();i++)
                {
                    //当前列名
                    String colName=meta.getColumnName(i);
                    //&#x5c06;&#x5217;&#x540d;&#x7b2c;&#x4e00;&#x4e2a;&#x5b57;&#x6bcd;&#x5927;&#x5199;&#xff08;&#x4e3a;&#x4ec0;&#x4e48;&#x52a0;+""&#x5462;&#xff1f;&#x4e3a;&#x4e86;&#x628a;char&#x7c7b;&#x578b;&#x8f6c;&#x6362;&#x4e3a;String&#x7c7b;&#x578b;&#x3002;replace&#x7684;&#x53c2;&#x6570;&#x662f;String&#x7c7b;&#x578b;&#x3002;&#xff09;
                    colName=colName.replace(colName.charAt(0)+"", new String(colName.charAt(0)+"").toUpperCase());
                    //设置方法名
                    String methodName="set"+colName;
                    //获取当前位置的值,返回Object类型
                    Object value=rs.getObject(i);
                    //利用反射机制,生成setXX()方法的Method对象并执行该setXX()方法。
                    Method method=obj.getClass().getMethod(methodName, value.getClass());
                    method.invoke(obj, value);
                }
                list.add(obj);
            }
        }catch(Exception ex)
        {
            ex.printStackTrace();
        }finally{
            return list;
        }
    }


    //将查询结果的第一条数据转换为指定类型的对象
    public static <T> T parseResultSet(ResultSet rs,Class<T> cls) {
        try {
            //只会将查询的第一天数据转换为对象
            if (rs.next()) { //实例化对象
                T obj = cls.newInstance(); //获取类中所有的属性
                Field[] arrf = cls.getDeclaredFields(); //遍历属性
                for (Field f : arrf) { //设置忽略访问校验
                    // f.setAccessible(true);
                    // 为属性设置内容
                    f.set(obj, rs.getObject(f.getName()));
                }
                return obj;
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block e.printStackTrace();
            }
            return null;

        }


    public static <T> List<T> parseResultSetAll(ResultSet rs,Class<T> cls) {
        try {
            List<T> list=new ArrayList<>();
            //将查询的所有数据转换为对象添加到集合
            while(rs.next()){
                //实例化对象
                T obj=cls.newInstance();
                //获取类中所有的属性
                Field[] arrf=cls.getDeclaredFields();
                //遍历属性
                for(Field f:arrf){
                    //设置忽略访问校验
                    f.setAccessible(true);
                    //为属性设置内容
                    f.set(obj, rs.getObject(f.getName()));
                }
                list.add(obj);//添加到集合
            }
            return list;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }


    public static <T> List<T> parseRSAll(ResultSet rs,Class<T> cls) {
        try {
            List<T> list=new ArrayList<>();
            //将查询的所有数据转换为对象添加到集合
            while(rs.next()){
                //实例化对象
                T obj=cls.newInstance();
                //获取类中所有的属性
                Field[] arrf=cls.getDeclaredFields();
                //遍历属性
                for(Field f:arrf){
                    //记录属性名称
                    String name=f.getName();
                    //获取当前属性上面的注解对象
                    Col fn=f.getAnnotation(Col.class);
                    if(fn!=null){
                        name=fn.value();//获取注解的内容
                    }
                    //设置忽略访问校验
                    f.setAccessible(true);
                    //为属性设置内容
                    f.set(obj, rs.getObject(name));
                }
                list.add(obj);//添加到集合
            }
            return list;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    }
View Code

 

posted @ 2018-10-16 18:57  甜菜波波  阅读(1042)  评论(0编辑  收藏  举报