單行結果集映射: 介面中方法返回值定義為Map類型,sql語句的resultType屬性設置為map即可。這種情況預設把列名作為key,列中的值作為value。 也就是說用map<Strirng,Object>接收,一個map集合對應查詢結果所封裝的一個對象(一行數據對應一個對象) 多行結果集映射: ...
單行結果集映射:
介面中方法返回值定義為Map類型,sql語句的resultType屬性設置為map即可。這種情況預設把列名作為key,列中的值作為value。
也就是說用map<Strirng,Object>接收,一個map集合對應查詢結果所封裝的一個對象(一行數據對應一個對象)
多行結果集映射:
List<Map<String,Object>>接收,存放查詢出來的多個對象
如果有一些特殊的情況,比如需要使用id值作為key,把一行數據封裝成的對象作為value放到map中的話,需要使用下麵的方式:
註意,這時候需要使用字元串來調用sql語句。
<select id="findAllUsers" resultType="User"> select id,name,gender from t_user </select>
@Test public void test_findAllUsers(){ SqlSession sqlSession = null; try { sqlSession = MyBatisSqlSessionFactory.openSession(); Map<Integer, User> map = sqlSession.selectMap("com.briup.mappers.SpecialMapper.findAllUsers","id"); map.forEach((k,v)->System.out.println(k+" : "+v)); } catch (Exception e) { e.printStackTrace(); } }
這裡map將id作為key值,而每行數據封裝成的User對象作為value值,sqlSession.selectMap()可以用我們指定的列作為key,預設使用封裝好的對象作為value。也就是key我們可以指定,但是value只能是當前這條數據封裝成的對象。
Map<Integer, User> map = sqlSession.selectMap("com.briup.mappers.SpecialMapper.findAllUsers","id");
其實核心只有以上一句代碼,指定id為Key
mybatis使用ResultHandler自定義結果集ResultSet
@Test public void test_ResultHandler(){ final Map<Integer,String> map = new HashMap<Integer, String>(); SqlSession sqlSession = null; try { sqlSession = MyBatisSqlSessionFactory.openSession(); sqlSession.select("com.briup.mappers.SpecialMapper.findAllUsers", new ResultHandler<User>() { @Override public void handleResult(ResultContext<? extends User> resultContext) { //獲取當這條數據封裝好的User對象 User user = resultContext.getResultObject(); //按照自己的要求的方式進行封裝 map.put(user.getId(), user.getName()); } }); map.forEach((k,v)->System.out.println(k+" : "+v)); } catch (Exception e) { e.printStackTrace(); } }