resultset结果集转换为实体List

来源:互联网 发布:淘宝的奇怪符号 编辑:程序博客网 时间:2024/05/26 02:21
package com.jointsky.automonitor.alarmnotice.noticemanager.utils;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import javax.persistence.Column;import javax.persistence.Entity;import org.apache.commons.beanutils.BeanUtils;/** * <p> * Description:resultset结果集转换为实体List * </p> * <p> * Copyright:Copyright(c) 2016 * </p> * <p> * </p> */public class ResultSetMapper<T> {    @SuppressWarnings({ "rawtypes", "unchecked" })public static <T>List<T> mapRersultSetToObject(ResultSet rs,  Class outputClass) {        List<T> outputList = null;        try {            // make sure resultset is not null            if (rs != null) {                // check if outputClass has 'Entity' annotation                if (outputClass.isAnnotationPresent(Entity.class)) {                    // get the resultset metadata                    ResultSetMetaData rsmd = rs.getMetaData();                    // get all the attributes of outputClass                    Field[] fields = outputClass.getDeclaredFields();                    while (rs.next()) {                        T bean = (T) outputClass.newInstance();                        for (int _iterator = 0; _iterator < rsmd                                .getColumnCount(); _iterator++) {                            // getting the SQL column name                            String columnName = rsmd                                    .getColumnName(_iterator + 1);                         // reading the value of the SQL column                            Object columnValue = rs.getObject(_iterator + 1);                            // iterating over outputClass attributes to check if any attribute has 'Column' annotation with matching 'name' value                            for (Field field : fields) {                                if (field.isAnnotationPresent(Column.class)) {                                    Column column = field                                            .getAnnotation(Column.class);                                    if (column.name().equalsIgnoreCase(                                            columnName)                                            && columnValue != null) {                                        BeanUtils.setProperty(bean, field                                                .getName(), columnValue);                                        break;                                    }                                }                            }                        }                        if (outputList == null) {                            outputList = new ArrayList<T>();                        }                        outputList.add(bean);                    }                } else {                    // throw some error                }            }        } catch (IllegalAccessException e) {            e.printStackTrace();        } catch (SQLException e) {            e.printStackTrace();        } catch (InstantiationException e) {            e.printStackTrace();        } catch (InvocationTargetException e) {            e.printStackTrace();        }        if (outputList == null) {            outputList = new ArrayList<T>();        }        return outputList;    }}
//注:实体名上加上@Entity,属性上加上@Column(name="数据库字段名")
 
 

0 0
原创粉丝点击