這篇文章主要給大家介紹了關於MyBatis查詢返回Map的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨着小編來一起學習學習吧
前言
有時候我們做查詢, 只需要返回兩個string類型的字段,方便我們后續的處理.比如根據商品的code查詢對應的分類的名字,需要返回一個map, key為商品code, value為商品分類對應的名稱.以方便我們后續對結果集的處理.如果你直接用mybatis返回一個map, 你可能會發現,結果根據不是自己需要的.這時候我們需要自己實現一個ResultHandler來實現我們想要的結果,廢話不多說,直接上代碼
方法如下
第一步,在mapper.xml文件當中,定義一個ResultMap
<resultMap id="nodeMap" type="java.util.HashMap"> <result column="areaCode" property="key"/> <result column="areaName" property="value" /> </resultMap>
這個map當中的property的定義,是我們在定義ResultHandler的時候,需要用到的.column是我們做sql查詢的時候mysql中字段的名稱,注意這里不支持駝峰自動映射,比如我這里寫了commodityCode, 后面需要用AS來處理一下.
第二步正常的在我們的mapper.xml中寫查詢語句
<select id="selectList" resultMap="nodeMap"> select area_code as areaCode ,area_name as areaName from area </select>
@Repository @Mapper public interface AreaMapper { Map<String, String> selectList(); }
注意返回類型為ResultMap, 也就是我們上面定義的那個.
第三步 自定義一個ResultHandler
public class MapResultHandler implements ResultHandler { private final Map<String ,String> mappedResults = new HashMap(); @Override public void handleResult(ResultContext resultContext) { Map<String ,String> m = (Map) resultContext.getResultObject(); mappedResults.put(m.get("key"), m.get("value")); } public Map getMappedResults() { return mappedResults; } }
第四步 就是使用了, 我們在service層, 利用spring的自動注入,來注入mybatis的sqlSession
@Autowired private AreaMapper areaMapper; @Autowired private SqlSession sqlSession;
@ResponseBody
@GetMapping("/dp/findAllAreaCode.action")
public Map<String,String> findAllAreaCode( ){
MapResultHandler handler= new MapResultHandler();
sqlSession.select("com.cetcgidata.lec.dao.AreaMapper.selectList",handler);
Map<String,String> nodeMap=handler.getMappedResults();
return nodeMap;
}
使用sqlSession的select方法,第一個參數是mapper.xml文件當中定義的select的命名空間, 第二個參數是需要傳入的參數,如果沒有可以不要這個參數.第三個是我們自定義的handler, 這樣就能返回我們要的map結果了.
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對我們的支持。