zoukankan      html  css  js  c++  java
  • ResultSet转成java类对象

    在做web开发时遇到一个事情:

    需要从mysql数据表中查询数据并遍历查询结果

    这样最简单的方式是:查询到结果根据表中字段列表的顺序来一个个获取字段,但这样需要记住字段的顺序,操作起来不是那么方便。因此便想可不可以把查询结果

    ResultSet转化成java的实例对象,然后利用类对象的get方法,这样会方便清晰很多。

    查了下,有很多可以参考,于是参考着有了自己的代码,如下:

    1.mapper函数:

    package com.alibaba.search.offline.oddiff.service;


    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;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;

    import com.jcraft.jsch.Logger;

    //import com.alibaba.druid.sql.ast.statement.SQLCreateViewStatement.Column;

    public class OddiffResultSetMapper<T> {
    protected static Log logger = LogFactory.getLog(OddiffResultSetMapper.class);
    @SuppressWarnings("unchecked")
    public List<T> mapRersultSetToObject(ResultSet rs, Class outputClass) {
    List<T> outputList = null;
    try {
    // make sure resultset is not null
    if (rs != null) {
    logger.info("rs:"+rs);
    // 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);
    logger.info("columnName:"+columnName+",value:"+columnValue);
    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
    }
    } else {
    logger.info("rs is null");
    return null;
    }
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    } catch (SQLException e) {
    e.printStackTrace();
    } catch (InstantiationException e) {
    e.printStackTrace();
    } catch (InvocationTargetException e) {
    e.printStackTrace();
    }
    return outputList;
    }
    }

     2.类对象的声明:

    package com.alibaba.search.offline.oddiff.service;

        import java.util.Date;

    import javax.persistence.Column;

        import javax.persistence.Entity;

        @Entity

        public class OddiffEntity {

            @Column(name="id")    

            private Integer Id;

            @Column(name="user_name") 

            private String userName;

            @Column(name="app_name") 

            private String appName;

            @Column(name="online_version") 

            private String onlineVersion;

            @Column(name="oa_version") 

            private String oaVersion;

            @Column(name="data_name") 

            private String dataName;

            @Column(name="start_time") 

            private String startTime;

            @Column(name="end_time") 

            private String endTime;

            @Column(name="commit_time") 

            private String commitTime;

            @Column(name="duration_time") 

            private String durationTime;

            @Column(name="status") 

            private String status;

            @Column(name="log_file") 

            private String logFile;

            public void setId(Integer id) {

                this.Id = id;

            }

            public Integer getId() {

                return Id;

            }

            public void setUserName(String userName) {

                this.userName = userName;

            }

            public String getUserName() {

                return userName;

            }

            public void setAppName(String appName) {

                this.appName = appName;

            }

            public String getAppName() {

                return appName;

            }

            public void setOnlineVersion(String onlineVersion) {

                this.onlineVersion = onlineVersion;

            }

            public String getOnlineVersion() {

                return onlineVersion;

            }

            public void setOaVersion(String oaVersion) {

                this.oaVersion = oaVersion;

            }

            public String getOaVersion() {

                return this.oaVersion;

            }

            public void setDataName(String dataName) {

                this.dataName = dataName;

            }

            public String getDataName() {

                return dataName;

            }

            public void setStartTime(String startTime) {

                this.startTime = startTime;

            }

            public String getStartTime() {

                return startTime;

            }

            public void setEndTime(String endTime) {

                this.endTime = endTime;

            }

            public String getEndTime() {

                return endTime;

            }

            public void setCommitTime(String commitTime) {

                this.commitTime = commitTime;

            }

            public String getCommitTime() {

                return commitTime;

            }

            public void setDurationTime(String durationTime) {

                this.durationTime = durationTime;

            }

            public String getDurationTime() {

                return durationTime;

            }

            public void setStatus(String status) {

                this.status = status;

            }

            public String getStatus() {

                return status;

            }

            public void setLogFile(String logFile) {

                this.logFile = logFile;

            }

            public String getLogFile() {

                return logFile;

            }

            @Override

            public String toString() {

                return  "id: " + Id + " " + 

                        "user_name: " + userName + " "+

                        "app_name: " + appName + " " ;

            }

        }

     3.真的转化:

       public static List<OddiffEntity> Execute_select(Connection conn, String sql) {

            if (conn==null)

                conn = getConn();//此处为通过自己写的方法getConn()获得连接

            OddiffResultSetMapper<OddiffEntity> resultSetMapper = new OddiffResultSetMapper<OddiffEntity>();

            try {

                Statement stmt = conn.createStatement();

                ResultSet rs = stmt.executeQuery(sql);

                logger.info("---sql:"+sql);

                logger.info("select result:"+rs.getFetchSize());

                List<OddiffEntity> pojoList = resultSetMapper.mapRersultSetToObject(rs, OddiffEntity.class);

                if (pojoList!=null){

                    for (OddiffEntity job:pojoList){

                        logger.info("job:"+job.toString());

                    }

                }

                return pojoList;

            } catch (SQLException e) {

                e.printStackTrace();

            }

            return null;

        }

  • 相关阅读:
    web服务器-Apache
    nginx优化
    nginx下载限速
    nginx-URL重写
    HDU 5358 First One 求和(序列求和,优化)
    HDU 5360 Hiking 登山 (优先队列,排序)
    HDU 5353 Average 糖果分配(模拟,图)
    UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。
    HDU 5348 MZL's endless loop 给边定向(欧拉回路,最大流)
    HDU 5344 MZL's xor (水题)
  • 原文地址:https://www.cnblogs.com/aiwa/p/5974127.html
Copyright © 2011-2022 走看看