mybatis接口绑定失效的解决
作者:张意的博客
mybatis接口绑定失效
出现错误:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
解释:这是mybatis所报的异常,意思是接口绑定失效
原因:
1.项目编译完成后mapper接口和mybatis的xml不在同一个目录下导致接口绑定失败。
2.如果是maven工程,使用idea编辑工程,会出现xml文件无法被编译到target当中,这种情况有两种解决,首先将和mapper接口在一起的xml文件放在resources文件夹下,这种情况下需要将xml文件所在的包名改成和mapper所在包名一致,还有一种情况就是在pom文件中将xml文件所在的目录标记为资源路径。
3.配置文件的路径写的有问题,在spring整合mybatis配置中指定mybatis的xml路径出错尤其注意如果如果resources包下和java包下路径相同一定要在路径前加classpath:来区别两者的不同,不然也会出现接口绑定失效的问题。
4.mybatis的xml文件中标签的namespace和对应mapper接口的全限定类名(包名+类名,不含类的后缀名)不一致
5.mybatis的xml文件中标签的id与对应mapper接口中的方法名不一致
与对应mapper接口中的方法名不一致**
小结一下
大体总结为mapper接口和xml之间关联出错,还有就是配置文件对xml所在文件路径指定错误,最后就是在编译后mapper接口和mybatis的xml不在同一个文件夹中。
mybatis接口绑定方法
通常情况下,使用Mapper.xml是无法实现多个参数的传递,除非传入Map或者是对象,这个时候我们就可以使用接口绑定的方法传入多个参数,
实现方法
第一步:创建一个与XML包名,类名完全相同的接口,包名类名即XML中配置的namespace
第二步:创建一个与XML中ID相同的方法,然后设置参数,
public interface LogMapper { List<Log> selAll(); }
第三步:在 mybatis.xml 中使用<package>进行扫描接口和 mapper.xml
<mappers> <package name="com.bjsxt.mapper"/> </mappers>
在XML中传递参数
因为有多个参数,所以在XML中参数的返回值可以不用写, 但是在传参的时候。
第一种方法:可以在SQL语句中加入#{0} #{param1}就可以传递参数
第二种方法: 使用注解传递参数,
第一步 : 在函数的参数前添加注解
List<Log> selByAccInAccout(@Param("accin") String accin123,@Param("accout") String accout3454235);
第二步: #{} 里面写@Param(“内容”)参数中
<!-- 当多参数时,不需要写 parameterType --> <select id="selByAccInAccout" resultType="log" > select * from log where accin=#{accin} and accout=#{accout} </select>
这就相当于是系统底层给我们也注释中写的字符串为Key 以形参为value 形成一个key然后传递给XML 这就实现了多个参数的传递
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。