總結了常見的解決方式,如下 1、檢查xml文件的namespace是否對應介面,要是全路徑。 xml文件名不需要和介面名一致,namespace和介面全類名一致即可。 2、xml中的函數id和介面中的函數名是否對得上,參數類型、返回值類型是否對得上 3、去看輸出目錄中有沒有xml映射文件,maven ...
總結了常見的解決方式,如下
1、檢查xml文件的namespace是否對應介面,要是全路徑。
xml文件名不需要和介面名一致,namespace和介面全類名一致即可。
2、xml中的函數id和介面中的函數名是否對得上,參數類型、返回值類型是否對得上
3、去看輸出目錄中有沒有xml映射文件,maven項目預設把資源文件放在src/main/resources下,預設只識別src/main/resources下的資源文件。
如果你把xml映射文件等資源文件放到src/main/java的某個目錄下,識別不了,需要在pom.xml中配置一下:
<resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> <filtering>true</filtering> </resource> </resources>
把資源文件的路徑都寫進去。
4、看一下mybatis的配置對不對
#實體類別名
mybatis.type-aliases-package=com.chy.xm_mall.model
#映射文件的位置
mybatis.mapper-locations=classpath:mapper/*.xml
5、看一下xml映射文件是否帶了尾碼名.xml
這個很容易被忽略,一次SpringBoot中使用MyBatis時我調了半天,其它可能性都被排除了,愣是找不到原因,最後發現是我創建映射文件時直接輸入UserDaoMapper,沒帶尾碼.xml。
你不帶尾碼.xml,IDEA根據文件內容能識別它是xml文件,顯示的圖標也是xml文件的,但不帶.xml尾碼就不是映射文件,運行時識別不了。
第二個才是正確的。
一些常用方法
- 看輸出目錄有沒有xml映射文件
- 刪掉輸出目錄,重新編譯運行,因為輸出目錄下的資源文件可能沒有更新
將來可能會出現的
xml的dtd聲明要與使用的mybatis版本保持一致
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
這是mybatis3的聲明,將來如果使用更高版本的mybatis,註意dtd聲明也要對應。
未驗證的
- 去掉xml文件中的中文註釋
- 隨意在xml文件中加一個空格或者空行然後保存。想來這個和刪除輸出目錄的目的一樣,都是覺得刪除目錄的資源文件(xml映射文件)沒有更新,手動修改下文件,提醒IDEA更新輸出目錄下的資源文件。