javascript
SpringBoot踩坑记录 Invalid bound statement (not found)引发的一些列问题
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>節點內,添加一段
<resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><!-- 是否替換資源中的屬性--><filtering>false</filtering></resource> </resources>3.當你打包時,手動把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
總結
以上是生活随笔為你收集整理的SpringBoot踩坑记录 Invalid bound statement (not found)引发的一些列问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++17(12)-raw string
- 下一篇: android自动化测试之robotiu