首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JDBC ResultSet 轉 List<T> 通用工具方法實現

     編輯:Java 相關知識

需求背景

在 JDBC 開發中,頻繁需要將 ResultSet 查詢結果映射為實體對象列表。本文提供一個基於反射與 JSON 庫的通用轉換方法,適合快速開發與原型驗證。

核心代碼

import net.sf.json.JSONArray;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.*;

public static <T> List<T> convertToList(ResultSet rs, Class<T> clazz) throws SQLException {
    List<Map<String, Object>> rowList = new ArrayList<>();
    ResultSetMetaData meta = rs.getMetaData();
    int columnCount = meta.getColumnCount();

    while (rs.next()) {
        Map<String, Object> row = new HashMap<>();
        for (int i = 1; i <= columnCount; i++) {
            row.put(meta.getColumnName(i), rs.getObject(i));
        }
        rowList.add(row);
    }

    // 利用 JSON 庫實現 Map → Bean 的自動映射
    JSONArray jsonArray = JSONArray.fromObject(rowList);
    return JSONArray.toList(jsonArray, clazz);
}

原理解析

  1. 遍歷 ResultSet,利用 ResultSetMetaData 獲取列名與值,構建 List<Map<String,Object>>。
  2. 將 List 序列化為 JSONArray。
  3. 調用 JSONArray.toList(jsonArray, clazz) 反序列化為目標實體列表(依賴 net.sf.json-lib 庫)。

依賴坐標

<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>

優缺點評估

優點缺點
代碼極簡,零配置映射依賴第三方 JSON 庫,增加體積
支持巢狀對象、集合等複雜類型性能較原生反射/RowMapper 稍低
字段名不匹配時自動忽略,容錯性好日期/時間類型需註冊 JsonConfig 處理

進階建議

生產環境高性能場景建議使用 Spring JdbcTemplate 的 BeanPropertyRowMapper 或 MyBatis 等成熟 ORM 框架。本方法適合中小項目、工具類遷移、測試代碼快寫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved