1. 程式人生 > >將ResultSet結果集通過反射轉換成物件LIST集合

將ResultSet結果集通過反射轉換成物件LIST集合

說明:Lz新手,通過這個練習反射。(mysql資料庫)

一,簡單的建立一個數據庫,並給上資料。
這裡寫圖片描述

二、
1.建立一個Emp.java 。
2.建立和 資料庫中各列名一樣的屬性,且為private型別。
3.有一個空構造器。
4.有get/set 方法,重寫toString方法,hashCode和equals方法。

三、寫一個測試類。

public class TestUser {
    public static void main(String[] args) {
           //查詢所有資訊,輸出List集合
queryAllUserInfo(); } private static void queryAllUserInfo() { //建立一個List集合,來裝emp List<Emp> list=new ArrayList<>(); //宣告連結,在後面獲取連結 Connection connection=null; PreparedStatement preparedStatement=null; ResultSet resultSet=null
; String sql="select * from t_emp"; try { //通過自己寫的工具類獲取連結 connection=WyUtil.createConnection(); //獲取preparedstatement preparedStatement=WyUtil.createPreparedStatement(connection, sql); resultSet=preparedStatement.executeQuery(); //自己寫的一個resultToList方法,把resultSet的資訊轉換為Emp的物件,並將物件裝進List集合
list=WyUtil.resultToList(resultSet, Emp.class); } catch (Exception e) { e.printStackTrace(); }finally { //通過工具類關閉所有連結 WyUtil.closeAll(connection, preparedStatement, resultSet); } //輸出所有物件的資訊 System.out.println(list); } //resultToList方法 public static <T> List<T> resultToList(ResultSet resultSet, Class<T> clazz) { //建立一個 T 型別的陣列 List<T> list = new ArrayList<>(); try { //通過反射獲取物件的例項 T t = clazz.getConstructor().newInstance(); //獲取resultSet 的列的資訊 ResultSetMetaData metaData = resultSet.getMetaData(); //遍歷resultSet while (resultSet.next()) { //遍歷每一列 for (int i = 0; i < metaData.getColumnCount(); i++) { //獲取列的名字 String fName = metaData.getColumnLabel(i + 1); //因為列的名字和我們EMP中的屬性名是一樣的,所以通過列的名字獲得其EMP中屬性 Field field = clazz.getDeclaredField(fName.toLowerCase()); //因為屬性是私有的,所有獲得其對應的set 方法。set+屬性名首字母大寫+其他小寫 String setName = "set" + fName.toUpperCase().substring(0, 1) + fName.substring(1).toLowerCase(); //因為屬性的型別和set方法的引數型別一致,所以可以獲得set方法 Method setMethod = clazz.getMethod(setName, field.getType()); //執行set方法,把resultSet中的值傳入emp中, 再繼續迴圈傳值 setMethod.invoke(t, resultSet.getObject(fName)); } //把賦值後的物件 加入到list集合中 list.add(t); } } catch (Exception e) { e.printStackTrace(); } // 返回list return list; }