使用myBatis调用存储过程的返回值,提示错误信息:

org.apache.ibatis.binding.BindingException: Mapper method 'com.xxxx.other.dao.MyDao.getNo attempted to return null from a method with a primitive return type (int).

先查mysql监控语句,发现存储过程调用正常,也得到了返回值,继续查

对应的文件

存储过程:

CREATE PROCEDURE `Get_Table_Flow_No`(IN `输入表名` VARCHAR(100), IN `待取数` INT, OUT `输出要取的最大流水号` INT)
BEGIN
DECLARE `willRetNo` INT; SET `输出要取的最大流水号` = 0 ; SELECT 字段_已取最大流水号 INTO `willRetNo` FROM 流水号保存表 WHERE 字段_表名=`输入表名` for UPDATE; IF `willRetNo` IS NULL THEN
SET `willRetNo` = `待取数` ;
INSERT INTO `流水号保存表`
(字段_表名,字段_已取最大流水号,字段_上次获取时间)
VALUES (`输入表名`, `willRetNo`, NOW());
ELSE
SET `willRetNo` = `willRetNo` + `待取数` ; UPDATE `流水号保存表`
SET 字段_已取最大流水号 = `willRetNo`
, 字段_上次获取时间 = NOW()
WHERE 字段_表名=`输入表名` ;
END IF; SET `输出要取的最大流水号` = `willRetNo`; END

  MyDao.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xxxx.other.dao.MyDao">
<parameterMap type="java.util.Map" id = "FlowNoMap">
<parameter property="输入表名" mode="IN" jdbcType="VARCHAR"/>
<parameter property="待取数" mode="IN" jdbcType="INTEGER"/>
<parameter property="返回最大数值" mode="OUT" jdbcType="INTEGER"/>
</parameterMap> <select id="getFlowNo" parameterMap="FlowNoMap" statementType="CALLABLE">
<if test="_databaseId == 'mysql'">
call Get_Table_Flow_No(#{输入表名 ,jdbcType=VARCHAR,mode=IN},#{待取数,jdbcType=INTEGER,mode=IN},#{返回最大数值 ,jdbcType=INTEGER,mode=OUT});
</if>
<if test="_databaseId == 'sqlserver'"></if>
</select> </mapper>

  MyDao.java

package com.xxxx.other.dao;

import org.apache.ibatis.annotations.Param;
import org.springframework.dao.DataAccessException; import java.util.List;
import java.util.Map; public interface MyDao {
int getNo(Map<String, Object> parameterMap) throws DataAccessException;
}

错误信息出在:

org/apache/ibatis/binding/MapperMethod.java 方法 execute 中

    if (result == null && method.getReturnType().isPrimitive() && !method.returnsVoid()) {
throw new BindingException("Mapper method '" + command.getName()
+ " attempted to return null from a method with a primitive return type (" + method.getReturnType() + ").");
}

  因为result 为 null,所以抛出了异常,往上推,同文件中

else if (SqlCommandType.SELECT == command.getType()) {
if (method.returnsVoid() && method.hasResultHandler()) {
executeWithResultHandler(sqlSession, args);
result = null;
} else if (method.returnsMany()) {
result = executeForMany(sqlSession, args);
} else if (method.returnsMap()) {
result = executeForMap(sqlSession, args);
} else {
Object param = method.convertArgsToSqlCommandParam(args);
result = sqlSession.selectOne(command.getName(), param);
}
}

 调用的是最后一个条件:

Object param = method.convertArgsToSqlCommandParam(args);
result = sqlSession.selectOne(command.getName(), param);
调用的存储过程中,只是把值通过输出参数返回出来,没提供select语句,所以result为空,但param中有对"返回最大数值"取到值
再返回报错的地方,看到有验证条件: !method.returnsVoid() ,实际在myDao.xml中是没有返回的,查询 MyDao.java,
接口中有返回值: int getNo(Map<String, Object> parameterMap) throws DataAccessException;
把 int 调整为 void, 程序运行正常,通过 parameterMap 取到了最大数

Mapper method 'com.xxxx.other.dao.MyDao.getNo attempted to return null from a method with a primitive return type (int)的更多相关文章

  1. rg.apache.ibatis.binding.BindingException: Mapper method 'com.dao.Cameao.getOnlineDayRation attempted to return null from a method with a primitive return type (float)

    本文为博主原创,未经允许不得转载: 异常展示如下: org.apache.ibatis.binding.BindingException: Mapper method 'com.dao.Cameao. ...

  2. org.apache.ibatis.binding.BindingException: Mapper method 'attempted to return null from a method with a primitive return type (long).

    一.问题描述 今天发现测试环境报出来一个数据库相关的错误 org.apache.ibatis.binding.BindingException: Mapper method 'attempted to ...

  3. delete attempted to return null from a method with a primitive return type (int)

    今天被自己给蠢死了 今天在代码中遇到这个错误, 百度翻译一下:映射方法,从一org.system.mapper.child.chmorganizationexaminationmapper.delet ...

  4. attempted to return null from a method with a primitive return type (int).

    java接口文件 package com.cyb.ms.mapper; import org.apache.ibatis.annotations.Param; public interface Acc ...

  5. mybatis查询时使用基本数据类型接收报错-attempted to return null from a method with a primitive return type (int)

    一.问题由来 自己在查看日志时发现日志中打印了一行错误信息为: 组装已经放养的宠物数据异常--->Mapper method 'applets.user.mapper.xxxMapper.xxx ...

  6. mysql查询null异常:attempted to return null from a method with a primitive return type

    select sum(deposit_amount)from tb_commission_ib_day mysql查询时报异常: attempted to return null from a met ...

  7. Mapper method 'com.autoyol.mapper.trans.AccountLogMapper.getTotalIncomByMemNoLastest attempted to return null from a method with a primitive return type (int).解决方法

    1.打开日志输出,降低日志级别. <AppenderRef ref="console" level="trace"></AppenderRef ...

  8. spring3+structs2整合hibernate4时报org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void sy.dao.impl.UserDaoImpl.setSessionFactory(org.hibernate.SessionFactory);

    今天在spring3+structs2整合hibernate4时报如下错误,一直找不到原因: org.springframework.beans.factory.BeanCreationExcepti ...

  9. EF C# ToPagedList方法 The method 'Skip' is only supported for sorted input in LINQ to Entities. The method 'OrderBy' must ……

    报错信息:The method 'Skip' is only supported for sorted input in LINQ to Entities. The method 'OrderBy' ...

随机推荐

  1. 标准模板库中的栈(stack)

    ////C++数据结构与算法(第4版) Adam Drozdek 著  徐丹  吴伟敏<<清华大学出版社>> STL中的通用栈类实现为容器适配器:使用以指定方式运行的容器.栈容 ...

  2. Kubernetes——滚动更新和数据管理

    k8s——滚动更新滚动更新就是一次只更新一小部分副本,更新成功之后再更新更多的副本,最终完成所有副本的更新.滚动更新最大的好处是零停机,整个更新的过程中始终有副本运行,从而保证了业务的连续性.kube ...

  3. 「HNOI2008」玩具装箱

    传送门 Luogu 解题思路 \(\text{DP}\) 很显然: 设 \(dp_i\) 表示前 \(i\) 个玩具的最小费用,转移就是: \(dp_i = \max\limits_{0\le j & ...

  4. lnmp1.5下安装mongodb

    一.安装mongodb .下载MongoDB 2.6.0二进制发行版 $ curl -O http://downloads.mongodb.org/linux/mongodb-linux-x86_64 ...

  5. partialview 用法

    using  MvcApplication1.Models; @model MvcApplication1.Models.UserInfoModel @{     ViewBag.Title = &q ...

  6. Lamda ForEach使用

    List<User> list = new List<User>() { }, }, }, }; list.ForEach(p => Console.WriteLine( ...

  7. pgsql 查询jsonb中包含某个键值对的表记录

    pgsql 查询jsonb中包含某个键值对的表记录 表名 table_name ,字段 combos 类型为 jsonb 可为空,示例内容如下, $arr_combos = [ ['id' => ...

  8. DevOps - 总结

    章节 DevOps – 为什么 DevOps – 与传统方式区别 DevOps – 优势 DevOps – 不适用 DevOps – 生命周期 DevOps – 与敏捷方法区别 DevOps – 实施 ...

  9. js 对象补充

    js 对象 普通对象与对象简写 js 没有字典类型,只有对象类型,对象可以完全替代字典来使用 js 中对象的属性名,都采用字符串类型,所以就可以省略字符串的引号标识 对象中属性值为函数时,称之为方法, ...

  10. HihoCoder第三周与POJ2406:KMP算法总结

    HihoCoder第三周: 输入 第一行一个整数N,表示测试数据组数. 接下来的N*2行,每两行表示一个测试数据.在每一个测试数据中,第一行为模式串,由不超过10^4个大写字母组成,第二行为原串,由不 ...