Invalid bound statement (not found): com.***.mapper.TbItemCatMapper.selectByExample
做一个SSM项目,遇到如下问题:
网上找了很多经验贴,大多数解决办法是:
这些问题都排查过了,没发现问题,依然报错
最后经过排查,****生成的接口和xml实现文件要放在同一个包下才能起作用:
回想了一下错误,是因为对引入的jar包认识不足导致的。之前做的一个SSM项目,引入****之后,读取Mapper.xml文件,是在Spring.xml中配置的,如图:
因为觉得这个更简单,所以就直接这样子配置之后,把接口和Mapper.xml文件分开(因为觉得Java后缀和xml后缀文件放在一起怪别扭的,不美观):
结果跑了一次程序,前两天也能跑通,不过今天突然报这个错,我以为和新功能有冲突,排查了一天时间!
找了很多网帖后,终于发现了一个
致命错误就是:
由于这位大哥的帖子是最近的,阅读量也不高,所以不太好找到,不过还是很幸运遇到!!!
所以错误重点是:
配置了mybatis的分页插件后用service层去访问mapper层时被拦截了
正确写法是:
将接口和Mapper.xml文件放在同一个包下,SPring配置文件中,不需要扫描这个包,在Mapper项目的pom.xml中扫描这个包,放行就好!
总结:
****生成文件两种扫包方式:
1.spring配置文件扫包
2.Mapper项目的pom.xml文件扫包
如果项目中没有引入mybatis分页插件pagehelper-3.4.2-fix.jar,则两种方法皆可以用,如果引入了这个插件,只能用第二种方法。
因为配置了mybatis的分页插件后用service层去访问mapper层时被拦截了
感悟:
跟着视频敲项目代码,对于一个新的技术引入,如果回想起曾经也用其他技术实现了相似的功能,并不代表两个方法完全一样。比如以前扫描包的时候是在SPring配置文件中,这次学到的这个是在Dao层接口的pom.xml文件中扫包。我将以往的那个方法用在这个项目上,起初也能正常运行。以为是两个方法是一样的,结果昨日报错,我都没想到是这里出了问题。后来看了帖子,知道了之所以用在pom.xml扫包的方法,是因为这个SSM项目配置了mybatis的分页插件后用service层去访问mapper层时被拦截了。
不过所幸,我没有完完全全按照视频敲代码,也融入了我以往的方法,在经过艰难的调bug之后,我理解了两种方法的区别,学习到了新的技能!