因爲在開發過程中總是遇到這種List轉實體的問題,我記得之前用Hibernate的時候這個問題應該是很少遇到的,因爲可以直接賦值給實體,但是我現在用的是jdbcTemplate所以在執行queryForList的時候總是遇到這樣或者那樣的問題,而且寫一遍忘記一遍,所以今天就把他記錄下來方便後續學習。
因爲是初學者有很多地方表述的不正確,所以有看到博文的勿噴,提出意見我會進行修改,謝謝。
下面是JAVA後臺代碼,調用queryForList方法
返回值爲List,泛型爲?號代替
String sql = "SELECT T.FUN_ID,T.FUN_CD,T.FUN_NM FROM T_SM_FUNCTIONS T WHERE T.PAR_FUN_ID='0' AND T.FUN_TYPE='0'"; List<?> list = this.queryForList(sql); return list;
在service層進行實體賦值,我用到的方法是Iterator遍歷賦值
代碼如下:
List<?> list = this.roleDao.funcRolePblc(); //執行後臺代碼,返回List Iterator it = list.iterator(); //這裏需要注意的是要用list的iterator遍歷 if(list.size()>0){ while(it.hasNext()){ TRolFun rolf = new TRolFun(); //創建實體 Map<?, ?> rece = (Map<?, ?>) it.next(); //這裏要注意,it.next()得到這一條數據 rolf.setFuncd((String) rece.get("FUN_CD")); //實體賦值 rolf.setFunid(rece.get("FUN_ID").toString()); rolf.setFunnm((String) rece.get("FUN_NM")); } }
如此賦值完成,可以通過rolf.getFuncd的方法看到所賦的值
今天在做開發的時候找到了一種賦值給實體的方法,用的是for循環 代碼如下
List list = orderShowDao.getOrderMon(scoNo, strTim, endTim); //判斷不存在的天數賦值爲0 if(list.size()>0){ for(int i=0;i<list.size();i++){ Object obj = list.get(i);//可省略 直接用下面註釋的內容 Map orderMap = (Map) obj;//Map orderMap = (Map) list.get(i); System.out.println(orderMap.get("COUNT")); } }
或者直接用map的方法,不需要object轉型
Map orderMap = (Map) list.get(i);