【视频 & 交流平台】
http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=400000000155061&utm_medium=share
http://study.163.com/course/introduction.htm?courseId=1004638001&utm_campaign=commission&utm_source=400000000155061&utm_medium=share
https://gitee.com/happyangellxq520/spring-boot
http://412887952-qq-com.iteye.com/blog/2321532
【本篇博客,有配套视频,视频地址:《Spring Boot MyBatis-注解异常: BindingException Paramete》,公众号中点击下面的阅读原文,视频中讲解的更详细】
异常信息如下:
nested exception is org.apache.ibatis.binding.BindingException: Parameter 'name' not found. Available parameters are [0, 1, param1, param2]
出现这个异常的原因是因为你在使用@insert的使用,没有进行相应的字段对应关系。
如下的代码就会报如上的错误:
@Insert("insert into Demo(name,password) values(#{name},#{password})") public void save(String name,String password);
那么怎么修改呢?正确的代码应该如下:
@Insert("insert into Demo(name,password) values(#{name},#{password})") public void save(@Param("name") String name,@Param("password") String password);
这里使用@Param设置参数的对应关系。
但是如下的代码就不会报错:
@Insert("insert into Demo(name) values(#{name})") public void save(String name);
当 insert 语句中只有一个参数的,对应的void save方法不需要做任何特殊处理(不需要加@Param也是可以对应上的),当有多个参数的时候,需要使用@Param注解进行字段的对应。
公众号网友网友Sun回复:在MyBats内部!当只有一个参数时,会直接使用这个参数,当多个参数时,会创建Map对像包裏多个对多个参数!多个参数会比下标0开始一一对应,同时,会创建一个param1...pamamN.与多个参数一一对应,如果指定了@Param.则不会创paramN.@Param中value指向的就是别名!
视频&交流平台:
http://study.163.com/course/introduction.htm?courseId=1004329008
http://412887952-qq-com.iteye.com/blog/2321532