springboot 整合mybatis時,junit單元測試或打包時報無法找到Mapper中聲明的方法

背景

最近搭建了一個簡單的springboot+mybatis+thymelaf的項目,但是項目寫了部分數據庫代碼後跑單元測試提示找不到Mapper中聲明的,即如下錯誤:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): xxx

之前測試的兩個mapper方法都是能跑成功的,但現在也不行了,更蛋疼的是打包也報這個錯誤,但是直接啓動項目,mapper裏面的sql語句是能工作的,詭異的問題。

檢查

確定以下配置沒問題:

  • 在springboot 主類上加了@MapperScan 註解,並且設置了正確的包路徑。
  • 在application.properties 中正確設置了xml文件的路徑和model包的別名。
  • 將包含.xml mybatis的映射文件放在resource/mapper路徑下
  • 打包後看到target/classes 下面有xx.xml文件

但是就是springboot junit單元測試時,報上面提到的錯誤

最後的解決辦法

其實最早玩Mybatis的時候,它要求xxxMapper.xml 和xxxMapper.java 需要在同一個包下面,但是我這個直接放在mapper文件下,導致打包後沒有和xxxMapper.java 在一個目錄下,所以我想是不是這個原因導致的,試了一下果然可以。

即解決辦法是: 將 resources下面的xxxMapper.xml的文件夾層次結構改爲和xxxMapper.java的包的層次結構相同,即如果xxxMapper.java的包路徑是com.sj.mapper, 那麼resources下面的xxxMapper.xml的文件夾路徑應該是com/sj/mapper/xxxMapper.xml。

猜測:
假如不按照上面的方面,直接改xxxMapper.xml 中的mapper 的namespace爲看一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章