mybatis中使用map返回的默认格式为字段名为key,字段值为value,
但项目中遇到一个问题,就是查询出两列值,第一列作为key,第二列作为value,这样处理起来数据比较方便,于是需要自定义ResultHandler
先定义MapResultHandler
public class MapResultHandler implements ResultHandler { private final Map mapResults = new HashMap(); @Override public void handleResult(ResultContext resultContext) { Map resultObject = (Map) resultContext.getResultObject(); mapResults.put(resultObject.get("key"), resultObject.get("value")); } public Map getResults() { return mapResults; } }
SQL中查询出来的两列数据重命名为'key'和'value',这样在自定义的ResultHandler中将重新根据键值对封装到mapResults中,
在service层需要注入SqlSessionTemplate,使用方式:
Map<String, Object> params = new HashMap<>(); params.put("id", id); MapResultHandler resultHandler = new MapResultHandler(); sqlSessionTemplate.select(XXXMapper.class.getName() + ".getXxxById", params, resultHandler); Map results = resultHandler.getResults(); // 所有对应类目的属性值id和value都已经缓存
select方法里需要传入mapper的全限定名+statement名称,查询参数,自定义的ResultHandler