项目场景:
使用mybatis发现的一些问题
问题描述:
这是在接口当中写的方法
@Insert("INSERT INTO sys_user_role VALUES(#{userId} ,#{roleId})")
void saveUserRole( int userId , int roleId);
这是在service当中调用代码
mapper1.saveUserRole(userId, roleId);
这是mysql当中的表
这是报错情况 客户端
``
Type Exception Report
Message Request processing failed; nested exception is org.apache.ibatis.exceptions.PersistenceException:
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: org.apache.ibatis.binding.BindingException: Parameter 'userId' not found. Available parameters are [arg1, arg0, param1, param2]
### The error may involve com.itheima.dao.UserMapper.saveUserRole-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO sys_user_role VALUES(? ,?)
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'userId' not found. Available parameters are [arg1, arg0, param1, param2]
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877)
javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
Root Cause
org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: org.apache.ibatis.binding.BindingException: Parameter 'userId' not found. Available parameters are [arg1, arg0, param1, param2]
### The error may involve com.itheima.dao.UserMapper.saveUserRole-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO sys_user_role VALUES(? ,?)
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'userId' not found. Available parameters are [arg1, arg0, param1, param2]
# 原因分析:
首先看
错误信息是500 说明是服务器内部错误
继续往下看,发现是在sql中有问题,错误原因是
```java
org.apache.ibatis.binding.BindingException: Parameter 'userId' not found. Available parameters are [arg1, arg0, param1, param2]
到这里,问题就出来了,可能是元素名称写错了,然后就去查看
@Insert("INSERT INTO sys_user_role VALUES(#{userId} ,#{roleId})")
void saveUserRole( int userId , int roleId);
mapper1.saveUserRole(userId, roleId);
发现并没有问题,还是报错,奇了怪了。网上查了解决方法。
解决方案:
原来是两个变量,mybatis不清楚那个对应那个了,脑子抽了???
改成以下:
@Insert("INSERT INTO sys_user_role VALUES(#{userId} ,#{roleId})")
void saveUserRole( @Param("userId")int userId , @Param("roleId")int roleId);