博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
项目中mybatis异常处理
阅读量:3903 次
发布时间:2019-05-23

本文共 812 字,大约阅读时间需要 2 分钟。

异常代码:HTTP Status 500 - Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘userId’ not found. Available parameters are [arg1, arg0, param1, param2]

原因是给用户添加多个角色信息时候出现的问题代码如下:

@Insert("insert into users_role(userId,roleId) values (#{userId},#{roleId}) ")    void addRoleToUser(int userId, int roleId);

弄清楚了原因,因为多个值的获取,需要指明具体的参数引用 所以需要使用@Param属性。

首先清除@Param的作用

  • @Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中(一般通过#{}的方式,${}会有sql注入的问题)。
  • 当你使用了使用@Param注解来声明参数时,如果使用 #{} 或 ${} 的方式都可以,当你不使用@Param注解来声明参数时,必须使用使用 #{}方式。如果使用 ${} 的方式,会报错。

修改后的代码

@Insert("insert into users_role(userId,roleId) values (#{userId},#{roleId}) ")        void addRoleToUser(@Param("userId")int userId, @Param("roleId")int roleId);

转载地址:http://vyxen.baihongyu.com/

你可能感兴趣的文章
Java Lof4J日志
查看>>
SublimeText, Eclipse, Liteide--Golang开发环境搭建(Windows版)
查看>>
Java 反射概述
查看>>
Java集合工具
查看>>
Java集合工具2--Arrays
查看>>
SpringMVC原理探索,从DispatcherServlet开始
查看>>
Golang学习笔记:语言规范之词汇元素和类型
查看>>
Golang学习笔记:语言规范之类型(续)
查看>>
Golang学习笔记:语言规范之声明与作用域
查看>>
Golang学习笔记:语言规范二
查看>>
Java ThreadPoolExecutor线程池原理及源码分析
查看>>
Java ThreadLocal原理与源码
查看>>
走近AbstractQueuedSynchronizer
查看>>
aqs
查看>>
Thinking in Spring
查看>>
Java IO模型&NIO
查看>>
Thinking in Netty
查看>>
Java TPS实现
查看>>
Log4j2写日志的艺术
查看>>
C++ Primer Plus 第六版学习笔记第三章
查看>>