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 ...
随机推荐
- js数据访问的艺术
数据访问js无时不刻所要做的事情,提高对数据的访问效率对一般的小的程序来说,对性能并不会有明显的改善.但是对像淘宝这样项目巨大,访问量巨大的网站来说,一个数据访问效率的提高对性能来说可能产生很大提升. ...
- Linux批量解压缩脚本
#!/bin/bash # 批量解压缩脚本 # 作者: shaohsiung # 时间: // # Store all file names in the tmp directory with the ...
- H5调用百度地图导航
template <div class="map"> <div class="content_flex"><img src=&qu ...
- ionic-CSS:ionic tab(选项卡)
ylbtech-ionic-CSS:ionic tab(选项卡) 1.返回顶部 1. ionic tab(选项卡) ionic tab(选项卡) 是水平排列的按钮或者链接,用以页面间导航的切换.它可以 ...
- LeetCode 176. Second Highest Salary (第二高的薪水)
题目标签: 题目给了我们一个工资表,让我们返回第二高的工资. 利用Max,把第一高的工资找到,然后利用 NOT IN,去找到第二高的工资. Java Solution: Runtime: 153ms ...
- python+tushare获取A股所有股票代码和名称列表
接口:stock_basic 描述:获取基础信息数据,包括股票代码.名称.上市日期.退市日期等 注:tushare模块下载和安装教程,请查阅我之前的文章 输入参数 名称 | 类型 ...
- 随笔-ansible-4
触发器: 一个任务同时调用多个触发器: 为远程主机上的用户设置环境变量: 保存前一步命令的输出结果,并保存到foo中: 添加环境变量的另一种方式: 注意:lineinfile模块只适用于修改少量环境变 ...
- Word 多级节标题设置和图表章节号自动生成
写文章的时候,正文.图表.节标题,通过“样式”可以进行统一设置,这里我记录了几点小技巧: 1.多级标题如何设置 假设我要设置三级标题,下面以图的形式记录方式: 设置完之后,应用即可. 章节设定之后,可 ...
- ubuntu安装更新命令
ubuntu16.04LTS 进入ubuntu系统后,打开一个终端,如图所示.此时以普通用户身份登录. 由于更新系统需要用到管理员权限,因此要么使用"su -"直接切换到roo ...
- .net Core开源框架NetModular记录
NetModular 源码: https://github.com/iamoldli/NetModular 文档: https://nm.iamoldli.com/docs/guide/