问题:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'name' not found. Available parameters are [arg3, arg2, arg1, arg0, param3, param4, param1, param2]
以我的报错为例,这其实是 MyBatis 在绑定参数时找不到名为 name
的参数。 那么我们可以建立 Java 方法参数与 SQL 语句中占位符之间的正确映射
方法一:检查一些小细节
- XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
- XML映射文件的namespace属性为Mapper接口全限定名一致。
- XML映射文件中sql语句的id与Mapper 接口中的方法名一致,并保持返回类型一致。
- 确保在调用 Mapper 接口方法时传递的参数类型正确,并且数量与期望的参数数量一致
方法二:检查 Mapper 接口方法:加入@Param注解
这里引用黑马的一张图(我就是这样的解决的)
注意:@Param中的参数要与sql语句中的占位符的变量相同
dao层
public interface UserMapper {
User selectUserByName(@Param("name") String name);
}
xml中的sql
select * from emp where name like concat('%',#{name},'%')