首页 > 编程知识 正文

mybatis调用存储过程报错

时间:2023-05-06 19:34:24 阅读:209448 作者:1738

       今天生产环境中遇到一个突发问题,本来运行正常的一段MyBatis调用Mysql存储过程的代码突然报错,错误信息如下:
The server encountered an internal error that prevented it from fulfilling this request.</u></p><p><b>exception</b> <pre>org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement '包路径.方法名'.  It's likely that neither a Result Type nor a Result Map was specified.
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:981)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:871)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
      MyBatis中的Mapper如下所示:

<parameterMap id="certMap" type="java.util.Map"> <parameter property="变量1" jdbcType="INTEGER" javaType="java.lang.Integer" mode="IN"/> <parameter property="变量2" jdbcType="INTEGER" javaType="java.lang.Integer" mode="IN"/> <parameter property="o_outcode" jdbcType="INTEGER" javaType="java.lang.Integer" mode="OUT"/> <parameter property="o_outmsg" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/></parameterMap><select id="方法名" parameterMap="certMap" statementType="CALLABLE"> CALL 存储过程名(?,?,?,?)</select>  从错误堆栈的文本来看,应该是Mapper文件中的 select 节点没有定义resultType导致的,但是问题是这个存储过程之前一直在生产环境中正常执行的,而且他是一个存储过程,并没有定义返回值。  经排查,原来之最近在调试生产环境的数据的时候,对存储过程做过修改,其中为了跟踪运行状态,在存储过程中增加了一行代码:   select 变量名;   这行代码的select并没有into关键字,导致"变量值"作为结果输出了,进而导致了java端没有resultType的问题。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。