1. 程式人生 > >JAVA反射實現JdbcTemplate中查詢方法 返回的結果集自動封裝成對應的JAVABean對象

JAVA反射實現JdbcTemplate中查詢方法 返回的結果集自動封裝成對應的JAVABean對象

block ada declare object execute pla conn list() 語句

將JdbcTemplate中查詢方法返回的結果集自動封裝成對應的JAVABean對象

只能查詢單張表的數據 封裝到對應的JAVABean對象中 查詢的列數隨意 可以不查詢全部列 但JAVABean屬性 整數只能使用int或Integer 小數使用double或Double

 1 public List query(String sql, Object[] values, Class cls){ //第一個參數 sql語句 第二個參數 查詢語句參數的數組 第三個封裝數據JAVA bean對象的class對象
 2         ArrayList list=new ArrayList();
3 try { 4 conn=DBUtil.getConnection(); 5 ps=conn.prepareStatement(sql); 6 if(values!=null){ 7 for(int i=0;i<values.length;i++){ 8 ps.setObject(i+1, values[i]); 9 } 10 } 11 rs=ps.executeQuery();
12 ResultSetMetaData data=rs.getMetaData(); //得到當前結果集所有列的信息 13 ArrayList<String> ColumnNames=new ArrayList<String>();//創建集合存儲列名 14 for(int i=1;i<=data.getColumnCount();i++){ //遍歷每一列的名字 添加到集合 15 ColumnNames.add(data.getColumnName(i)); 16 }
17 18 while (rs.next()) { 19 Object obj=cls.newInstance(); //創建目標對象 20 Field[] fields=cls.getDeclaredFields();//得到所有屬性 21 for (int i = 0; i < ColumnNames.size(); i++) {//遍歷列名集合 22 Field f=null; 23 for (Field fi : fields) { //遍歷屬性集合 判斷屬性名 找到和列名相同的屬性對象 24 if(fi.getName().toUpperCase().equals(ColumnNames.get(i))){ 25 f=fi; 26 break; 27 } 28 } 29 if(f!=null){ 30 Object value=null;//數據庫列的值 31 if(f.getType()==Integer.class||f.getType()==int.class){ //數字類型需要特殊處理 32 value=rs.getInt(f.getName()); 33 }else if(f.getType()==Double.class||f.getType()==double.class){ 34 value=rs.getDouble(f.getName()); 35 }else{ 36 value=rs.getObject(f.getName());//字符 時間類型通過這個方法獲取 37 } 38 39 if(value==null){ //如果數據庫中列的值為null 獲取到的值也為null 所以結束本次循環 40 continue; 41 } 42 43 PropertyDescriptor prop=new PropertyDescriptor(f.getName(), cls);//創建屬性描述對象 44 prop.getWriteMethod().invoke(obj,value);//執行set方法 45 46 } 47 } 48 49 list.add(obj); //將賦值完成的對象 添加到集合 50 51 } 52 53 } catch (Exception e) { 54 // TODO Auto-generated catch block 55 e.printStackTrace(); 56 }finally{ 57 DBUtil.close(conn, rs,ps); 58 } 59 60 61 return list; 62 }

JAVA反射實現JdbcTemplate中查詢方法 返回的結果集自動封裝成對應的JAVABean對象