ibatis作爲一個輕量級的orm工具現在非常流行,我在使用中發現,有時僅僅希望返回一個類型爲map的list就可以了,
比如簡單的查詢統計之類的,沒有必要定義太多的pojo,因此想能不能在ibatis中直接傳入sql語句來執行,然後返回map呢?
從網上搜了一下, 還真有,實驗成功後總結一下,大家共同進步。
其實很簡單,就是在配置文件中添加以下的配置,
先在有兩種方法實現動態的傳入sql,然後返回List<Map<String,Object>>類型的數據。
第一種:如下
<!-- 測試Sql --> <select id="sqlQuery" parameterClass="java.lang.String" resultClass="java.util.HashMap" remapResults="true"> <![CDATA[ $sql$ ]]> </select>
<select id="getMapList" remapResults="true" resultClass="java.util.HashMap" > <![CDATA[ select ID,USERNAME,PASSWORD,CREATETIME from Account ]]> </select>
注意以上配置中的 remapResults="true",之前就因爲沒有加這個參數,導致使用不的sql查詢時出錯的問題。
使用方法就更簡單了,拼好sql語句後,調用
sqlMapper.queryForList("sqlQuery", sql)就得到了查詢結果,
當然這個結果爲List,並且list中的元素爲Map類型,循環List,就得到查詢明細。
以上方法對 於分類彙總類的查詢統計功能尤其實用。如果只是count()的話,就取List的第一個元素就行了。
我們可以把這個方法抽出來寫到一個util類中,方法如下
publicstaticList queryForList(String sql){List rtn=null;
try{
rtn = sqlMapper.queryForList("sqlQuery", sql);
}catch(SQLException sqle){
sqle.printStackTrace();
}
return rtn;
}
@SuppressWarnings("unchecked")
@Override
publicList<?>
getMapList(){
List<?>
list =newArrayList();
try{
list=
getSqlMapClientTemplate().queryForList(namespace+".getMapList");
}catch(Exception
e){
System.out.println(namespace+".getMapList()異常!"
+
e.getMessage());
}
return
list;
}
第二種:
在spring + ibatis 結構當中:
語句:
List<Map<String, Object>> list = super.jt.queryForList(sql);