1、需求:Mybatis查询结果集为Map时,其中Map中的key为列名,而key对应的value是该列对应的列值。项目中的需求为字段A对应的value作为Map的Key,字段B对应的value作为key对应的value。
2、实现思想:重写ResultHandler接口,,然后用SqlSession 的select方法,将xml里面的映射文件的返回值配置成 HashMap 就可以了。
3、代码实现:
(1)xml配置:
<resultMap id="ipNumResult" type="java.util.HashMap">
<result property="key" column="requestUrl"/>
<result property="value" column="num"/>
</resultMap>
<select id="getAccessUrlNum" resultMap="ipNumResult">
select a.request_url requestUrl, count(1) num from access_statistics a GROUP BY a.request_url;
</select>
(2)实现接口
public class MapResultHandler implements ResultHandler {
@SuppressWarnings("rawtypes")
private final Map mappedResults = new HashMap();
@SuppressWarnings("unchecked")
@Override
public void handleResult(ResultContext context) {
@SuppressWarnings("rawtypes")
Map map = (Map)context.getResultObject();
mappedResults.put(map.get("key"), map.get("value")); // xml 配置里面的property的值,对应的列
}
public Map getMappedResults() {
return mappedResults;
}
}
(3)调用类
public <K,V> Map<K,V> queryForMap(String statement, Object params) {
MapResultHandler handler = new MapResultHandler();
sqlSession.select(statement, params, handler);
return handler.getMappedResults();
}
参考资料的相关链接:http://www.cnblogs.com/GoQC/p/6216967.ht