天天看點

解決org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)問題

問題簡介:(Idea版)

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)問題,即在mybatis中dao接口與mapper配置檔案在做映射綁定的時候出現問題,簡單說,就是接口與xml要麼是找不到,要麼是找到了卻比對不到。

接口和mapper.xml 檔案在編譯的時候需要進行自動注解處理。可是找不到比對檔案那不是出問題了。

問題排查:

1、namespace

mapper.xml的namespace是否是對應接口類的全名(包括包名和類名):這個是必須要保證相同,需要進行檢查,而且全類名最好通過複制,通過Copy Reference來指派路徑名。
<mapper namespace="com.demo.mapper.ProductMapper">      
如果是IDEA 按住ctrl 點選可以跳轉的,可以跳轉就是沒問題了。

2、

mapper接口類和mapper.xml是否在同一個包下,檔案名稱是否一緻(僅字尾不同):其實,這個并不需要在同一個包下面,通常mapper.xml檔案是存放在src/main/resources目錄下,而mapper接口類是在src/main/java目錄下面;名稱是否相同也不重要,我的命名分貝為ProductDao.java和ProductMapper.xml,實際也可以運作成功 。

3. 

mapper接口類的方法名是否與mapper.xml中sql标簽的id相同:這個也需要進行檢查,必須保證一緻 。

4、application.yml

mybatis的配置:mapper-locations: classpath:mapper/*.xml 改成  mapper-locations*: classpath:mapper/*.xml 并沒有效果       
直接複制下面的配置改成你的。
#mybatis
mybatis:
  # 映射檔案的路徑 ,支援 Ant 風格的通配符, 多個配置可以使用英文逗号隔開
  mapper-locations: classpath:mapper/*.xml
  # 類型别名包畫配置,隻能指定具體的包,多個配置可以使用英文逗号隔開
  type-aliases-package: com.ismycc.domain.pojo
  # Mybatis SQL語句控制台列印
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
           

5、@MapperScan("com.ismycc.mapper") 

包名别寫錯了。
@MapperScan("com.ismycc.mapper")
@SpringBootApplication
public class MyccApplication {

    public static void main(String[] args) {
        SpringApplication.run(UmsApplication.class, args);
    }

}
           

6、看編譯後的檔案

解決org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)問題

如果你的編譯後的檔案中不包含 mapper/**.xml 檔案夾一切都是白費,報這個問題是必然的。

問題的原因是在 pom.xml 中配置了 

<resources>
        ***
</resources>
           

把xml檔案給過濾掉了。那肯定綁定不到一起去。

直接不寫過濾,或者用你的方式不要讓xml檔案被過濾掉就ok。