码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis中处理结果集映射

时间:2019-10-17 00:50:40      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:code   put   each   res   封装   open   div   字符   ext   

单行结果集映射:

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


}

 

mybatis中处理结果集映射

标签:code   put   each   res   封装   open   div   字符   ext   

原文地址:https://www.cnblogs.com/Magic-Li/p/11687631.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!