mybatis中處理結果集映射


單行結果集映射:

接口中方法返回值定義為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();
}


}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM