Mybatis查询方法如何实现没有返回值
最近在项目开发中发现一件非常有意思的事情,一个Mapper.java文件中有一个查询方法没有返回值,这引起了我的好奇心,
没有返回值查询还有什么用呢?
仔细去看这个Mapper.java文件对应的xml文件发现,查询正常,肯定是有返回值的。
可是为什么方法中却没有写返回值呢?这就让人感觉奇怪了。仔细查看方法,发现除了前面传递的两个参数之外,最后还有一个参数KeyValueMapResultHandler,
那这个参数是用来做什么的呢?点进去一看才知道它的用法。
它实现了一个接口ResultHandler<Map<String, Object>>,继续看这个接口如下:
它是Mybatis提供的接口,里面只有一个 方法handleResult,直译过来就是处理结果的意思。实际的用法是自定义处理Mybatis的查询结果。
由实现类可知,传入的泛型是一个Map集合Map<String, Object>,因此获取的值也将是一个Map集合,如上图中的这两段代码:
public class KeyValueMapResultHandler implements ResultHandler<Map<String, Object>>
Map<String, Object> map = resultContext.getResultObject();
简单理解就是Mybatis提供了一个接口用来自定义处理查询的结果,这个文件中是将查询的结果转换为key-value的形式,放在Map集合中方便取用。
如果是其他更加复杂的操作,也可以采取这种方式来进行处理Mybatis查询的结果集。
调用方式如下:
需要使用的时候,可以考虑采用这种处理方式。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Mybatis select记录封装的实现
select记录封装 返回一个List集合, resultType要写集合中元素的类型 <!-- public List<Employee> getEmpsByLastNameLike(String lastName); --> <!--resultType:如果返回的是一个集合,要写集合中元素的类型 --> <select id="getEmpsByLastNameLike" resultType="com.atguigu.myba
-
解决Mybatis查询方法selectById()主键不一致问题
Mybatis-plus的通用mapper为我们封装了很多方法,我们只需要将interface集成BaseMapper就可以.在BaseMapper中分装了一个方法=>selectById() selectById 这个方法是根据主键id进行查询记录的.返回一条记录.测试如下, 最终调用的是这个方法userDiamondMapper这个接口集成了BaseMapper. 注意这个表的主键就是uid,查询试试 返回结果不如我们预期,打印出的SQL很奇怪,并没有解析正确.猜测是因为无法正确解析出主键.
-
Mybatis使用useGeneratedKeys获取自增主键的方法
摘要 我们经常使用useGenerateKeys来返回自增主键,避免多一次查询.也会经常使用on duplicate key update,来进行insertOrUpdate,来避免先query 在insert/update.用起来很爽,但是经常踩坑,还不知为何.本篇就是深入分析获取自增主键的原理. 问题 首先摘两段我司一些老代码的bug 批量插入用户收藏 for (tries = 0; tries < MAX_RETRY; tries++) { final int result = colle
-
Mybatis查询方法如何实现没有返回值
最近在项目开发中发现一件非常有意思的事情,一个Mapper.java文件中有一个查询方法没有返回值,这引起了我的好奇心, 没有返回值查询还有什么用呢? 仔细去看这个Mapper.java文件对应的xml文件发现,查询正常,肯定是有返回值的. 可是为什么方法中却没有写返回值呢?这就让人感觉奇怪了.仔细查看方法,发现除了前面传递的两个参数之外,最后还有一个参数KeyValueMapResultHandler, 那这个参数是用来做什么的呢?点进去一看才知道它的用法. 它实现了一个接口ResultHan
-
MyBatis查询无记录时的返回值问题
目录 MyBatis查询无记录的返回值 在MyBatis 3.4.1下 查询无结果时的返回值报错问题 mybatis的查询无结果时报错 MyBatis查询无记录的返回值 在MyBatis 3.4.1下 如果Dao的返回值是实体,则select查询无记录时返回null.容易报空指针异常! Notice findById(); 如果Dao的返回值是List,则select查询无记录是返回的是[],也就是空数组, 而不是null.所以这时候判空需要用CollectionUtils.isNotEmpty
-
Mybatis查询多条记录并返回List集合的方法
实体对象如下: /** 使用lobmok插件 */ @Getter @Setter @NoArgsConstructor @ToString @EqualsAndHashCode public class Vendor { private String vend_id; private String vend_name; private String vend_address; private String vend_city; private String vend_state; privat
-
对python3 中方法各种参数和返回值详解
如下所示: # -*- coding:utf-8 -*- # Author: Evan Mi # 函数 def func1(): print('in the func1') return 0 # 过程 def func2(): print('in the func2') """ 多个值用逗号分割后返回,会分装到一个tuple中返回, 接收的时候,如果使用一个变量接收,那么这个接收变量就是一个tuple类型的 如果接收的时候也用逗号分割多个值来接收,那么可以分别对应返回tupl
-
mybatis 调用 Oracle 存储过程并接受返回值的示例代码
目录 存储过程 mapper.xml dao层 调用 存储过程 PROCEDURE P_TEST_MYBATIS(iv_ins1 IN VARCHAR2, --id iv_ins2 IN VARCHAR2, --no ov_res OUT number --提示信息 ) IS BEGIN ov_res := 0; select count(1) into ov_res from jc_zhiydoc t where t.zhiy_id = iv_ins1 and t.zhiy_no = iv_i
-
mybatis调用mysql存储过程并获取返回值方式
目录 mybatis调用mysql存储过程并获取返回值 1.mysql创建存储过程 2.mybatis调用 mybatis调存储过程遇到返回值null的坑 mybatis调存储过程时返回值null mybatis调用mysql存储过程并获取返回值 1.mysql创建存储过程 #结束符号默认;, delimiter $$语句表示结束符号变更为$$ delimiter $$ CREATE PROCEDURE `demo`(IN inStr VARCHAR(100), out ourStr VARCH
-
SpringMVC 方法四种类型返回值总结(你用过几种)
SpringMVC 现在算是 Java 领域的一个基础性框架了,很多人天天用,可是对于 SpringMVC 方法的返回值,你又是否完全清楚呢?今天松哥就来和大家聊一聊 SpringMVC 中四种不同类型的返回值,看看有没有 get 到你的知识盲点? 1. ModelAndView 以前前后端不分的情况下,ModelAndView 应该是最最常见的返回值类型了,现在前后端分离后,后端都是以返回 JSON 数据为主了.后端返回 ModelAndView 这个比较容易理解,开发者可以在 ModelAn
-
Jquery each方法跳出循环,并获取返回值(实例讲解)
return false:将停止循环 (就像在普通的循环中使用 'break').return true:跳至下一个循环(就像在普通的循环中使用'continue'). 复制代码 代码如下: function test(){var success = false;$(..).each(function () { if (..) { success = true; return false; }}); return success ;} jquery是对象链,所以$
-
sql查询返回值使用map封装多个key和value实例
直接上代码,代码是测试过的 1.重写ResultHandler public class MapResultHandler implements ResultHandler { private final Map mappedResults = new HashMap(); @Override public void handleResult(ResultContext context) { @SuppressWarnings("rawtypes") Map map = (Map) c
随机推荐
- 修改Windows Server 2008 R2 的3389远程端口的Bat批处理代码
- Asp.Net Core 通过中间件防止图片盗链的实例
- windows 下安装nodejs 环境变量设置
- javascript权威指南 学习笔记之null和undefined
- Unicode 编码转换器
- JavaScript之Getters和Setters 平台支持等详细介绍
- WinXP下安装IIS搭建ASP环境教程[图文]
- javaweb图书商城设计之购物车模块(3)
- 详细介绍kvm虚拟机静态和动态迁移(图文介绍)
- javascript时间排序算法实现活动秒杀倒计时效果
- PHP的Yii框架中YiiBase入口类的扩展写法示例
- typecho插件编写教程(三):保存配置
- Laravel如何友好的修改.env配置文件详解
- Python中为什么要用self探讨
- nodejs加密Crypto的实例代码
- Java微信公众平台开发(12) 微信用户信息的获取
- java 集合之实现类ArrayList和LinkedList的方法
- IOS中多手势之间的冲突和解决办法
- PHP数字格式化
- Android仿京东、天猫下拉刷新效果