小企业网站建设地点,无限流量网站建设,公益网站的设计与建设,河南基安建设集团有限公司网站SpringBoot踩坑记录
Invalid bound statement (not found)引发的一些列问题
当你开开心心搭建了一个SpringBoot项目#xff0c;用插件生成了entity、dao、mapper#xff0c;写下第一个Controller准备试一下#xff0c;结果却发现一条简单的查询报错了。
{timestamp…SpringBoot踩坑记录
Invalid bound statement (not found)引发的一些列问题
当你开开心心搭建了一个SpringBoot项目用插件生成了entity、dao、mapper写下第一个Controller准备试一下结果却发现一条简单的查询报错了。
{timestamp: 2019-03-18 16:21:48,status: 500,error: Internal Server Error,message: Invalid bound statement (not found): com.xxx.dao.UserMapper.selectByPrimaryKey,path: /test}经过排查发现target/classes/包名目录下不存在mapper文件夹一个令人伤心的事情。
于是我们知道了关键所在怎么把mapper下的xml文件打包进去。通过查阅资料我们知道了解决这个问题通常有两个思路
1.将mapper放在src/main/resource 目录下这个目录下默认是会打包进去的。
2.在pom文件的
build/build节点内添加一段
resourcesresourcedirectorysrc/main/java/directoryincludesinclude**/*.xml/include/includes!-- 是否替换资源中的属性--filteringfalse/filtering/resource
/resources3.当你打包时手动把xml文件所在的mapper文件夹丢进target/classes/包名/目录下。需要丢一次运行一次就好了
以上3种方法我只试过下面两种上面那种虽然没有确切放过xml文件但是其他类文件的存放以及打包倒是用过这个后面再说。
现在来确切说说第二种。这里是有坑的
坑.1 配置过度导致捡了芝麻丢了西瓜 比如会在别处看到一些这样的配置。实际上src/main/resources下的文件都会被打包如果把图中那段注释解开你会发现除了xml和properties文件其他东西都没打包进去如果你使用的是yml配置那么yml也不会被打包进去图中的这位博主估计也是发现了这段代码的弊大于利。
这里就牵扯出一个问题了。如果我的项目中resource下只有xml和properties文件这段配置也无伤大雅咯是的的确是这样templates和static下似乎是能打包进去的。
在解决了xml打包之后我们迫不及待的继续打包运行发现依旧是那个报错emmmmmmm这让人不禁有些头大。翻开前辈的项目发现了在yml下还配置了mybatis
mybatis:mapper-locations: classpath:com/xx/xxx/mapper/**/*.xmltype-aliases-package: com.xx.xxx.entityconfiguration:cache-enabled: false坑.2 Mybatis路径配置须小心
当看到路径里mapper/**/*.xml时不知怎么的我就自作聪明把mapper给删掉了/**/*.xml看似是指向下一级目录的xml文件但是当你自作聪明的删掉了这里之后你会发现xml虽然打包进去了但是你的dao依然找不到mapper还是报错。
血的教训啊童鞋们切记这个路径是包名/xml所在目录/**/*.xml