使用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. java并发:初探消费者和生产者模式

    消费者和生产者模式 用继承Thread方式,用wait和notifyAll方法实现. 消费者和生产者模式的特点 1. 什么时候生产:仓库没有满的时候,生产者这可以生产,消费者也可以消费,仓库满的时候停 ...

  2. Python学习第一课——if-else

    #if 基本语句 if 1==1: print("如果条件为真,if执行该语句") else: print("如果条件为假,if则执行这条语句") #if 多重 ...

  3. luogu P2756 飞行员配对方案问题(Dinic板子)

    建立一个超级源点,将每个外籍飞行员连一条capacity为1的路,一个超级汇点,每个英国飞行员也连一条capacity为1的路,根据读入在英国飞行员和外籍飞行员连接capacity为1的路,匹配方案就 ...

  4. Maven 使用Nexus搭建Maven私服

    Maven学习 (四) 使用Nexus搭建Maven私服 为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找 ...

  5. 六 Hibernate多表操作&级联&外键维护

    Hibernate的一对多关联映射 Hibernate的多对多关联映射 数据库表与表之间的关系:一对多,多对多,一对一 一对多:一个部门对应多个员工,一个员工只能属于一个部门.一个客户对应多个联系人, ...

  6. JMeter-响应断言设置

    针对如上请求,可以设置3种相应断言: 1. 2. 3.

  7. bsearch的使用

    懒得写二分查找,结果发现stdlib里自带了二分查找. C 库函数 void *bsearch(const void *key, const void *base, size_t nitems, si ...

  8. MinGW 安装与简单实例

    MinGW的下载 链接: https://pan.baidu.com/s/1JiZoyFHUWoeaxCQcUXCKgg 密码: myh3 MinGW的安装 基本上都是按提示的点击下一步操作 接下来修 ...

  9. Day7 - F - C Looooops POJ - 2115

    A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; variable != ...

  10. Day6 - D - Tree 园丁的烦恼 HYSBZ - 1935

    很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草.有一天国王漫步在花园里,若有所思,他问一个园丁道: “最近我在思索一个问题, ...