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();
} }
mybatis中处理结果集映射的更多相关文章
- MyBatis中sql语句
一.select <!-- 查询学生,根据id --> <select id="getStudent" parameterType="String&qu ...
- MyBatis 中 resultMap 详解
resultMap 是 Mybatis 最强大的元素之一,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中.如在实际应用中,有一个表为(用户角色表),通过查询用户表信息展示页面, ...
- MyBatis中二级缓存和延时加载同时开启的问题
首先,二级缓存默认不开启! 要配置 <setting name="cacheEnabled" value="true"/> 在MyBatis中:一级 ...
- Mybatis中mapper.xml的使用
详解多对多,mybatis多对多查询(xml方式和注解方式) 链接:https://blog.csdn.net/qq_42524262/article/details/98383977 链接:http ...
- Mybatis——ResultMap(结果集映射)的使用
ResultMap的使用 在Mybatis中,可以使用resultMap(结果集映射)作为sql的返回类型 一般用来解决如下问题: 数据库表字段名和实体类属性名不一致的问题: 多对一问题: 例如:多个 ...
- [原创]关于mybatis中一级缓存和二级缓存的简单介绍
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
- 记录一次bug解决过程:mybatis中$和#的使用
一.总结 mybatis中使用sqlMap进行sql查询时,经常需要动态传递参数.动态SQL是mybatis的强大特性之一,也是它优于其他ORM框架的一个重要原因.mybatis在对sql语句进行预编 ...
- mybatis中#{}与${}的差别(如何防止sql注入)
默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义. # ...
- mybatis 中的where标签
mybatis中的where标签可以去除 开头的 and 或者 or 但是放在后面的不行 失败的: <select id="countNotesByParam" parame ...
随机推荐
- Unity 调用android
{ https://www.bilibili.com/video/av49002527 }
- delphi xe10 获取屏幕截图
//截取屏幕图片 function MakeScaleScreenshot(Sender: TControl): TBitmap; function GetScreenScale: Single; v ...
- NOI2019赛前两周被吊打记录
7.1 T1看了半天发现会个暴力FWT,然后突然返发现随便容斥一下就好了 T2猜了个只有13和23的,结果打个表发现伪了,然后标号不只一种连搜索都写错了,也没想过可以轮廓线dp,菜哭了o(╥﹏╥)o ...
- Struts功能详解——ValidatorForm
ActionForm和ValidatorForm区别: 一个Form继承了ValidatorForm 就不用写具体的验证,但是需要提供:validation-rules.xml 和 val ...
- Feign连接超时 Read timed out
在远程调用的过程中由于连接超时,导致无法成功请求数据,下面是报错 项目中用的是spring-cloud-starter-openfeign 2.2.0版本 找到对应的文档,开始查阅资料 文档首页就找到 ...
- NX二次开发-获得图纸抑制尺寸的表达式UF_DRF_ask_controlling_exp
#include <uf.h> #include <uf_modl.h> #include <uf_drf.h> #include <uf_obj.h> ...
- 虚拟IP---Linux下一个网卡配置多个IP
转:http://blog.csdn.net/turkeyzhou/article/details/16971225 Linux下配置网卡ip别名何谓ip别名?用windows的话说,就是为一个网卡配 ...
- 2018 – 2019 年前端 JavaScript 面试题
JavaScript 基础问题 1.使以下代码正常运行: JavaScript 代码: const a = [1, 2, 3, 4, 5]; // Implement this a.multiply( ...
- Model Maker上手指南
Model Maker上手指南 目录 1.MM可爱的脸 2.MM中的工程Project 3.新建类图 4.添加类成员 5.实现类的方法 6.生成Delphi代码 7.逆向到模型 8.完全的逆向工程 作 ...
- git学习记录2(远程库管理)
学习参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本编随笔只是自己对 ...