這個問題比較簡單,其實出現這個問題實質就是mapper接口和mapper.xml文件沒有映射起來。
有些細節可以逐一排查,常見的錯誤如下:
1、檢查xml文件所在package名稱是否和Mapper interface所在的包名
<mapper namespace="com.enmox.emcs.market.dao.MarketDao">
mapper的namespace寫的不對!我之前是從別的模塊復制的,只改了 MarketDao,沒有改前面的 market.dao.MarketDao,導致報錯。
2、看下mapper的XML配置路徑是否正確
mybatis: mapper-locations: classpath*:mybatis/**/*.xml executor-type: simple config-location: classpath:mybatis-config.xml type-aliases-package: com.***.user.model,***,com.***.market.model
type-aliases-package:配置映射類所在的包名
這個有時候是報 ClassNotFound 的錯。
3、MarketDao 的方法在 MarketDao.xml 中沒有,然后執行MarketDao的方法會報此錯誤。
即mapper接口中的方法名和mapper.xml中的id標簽不一致,這個問題解決方法一樣,仔細對對。
4、MarketDao 的方法返回值是 List<market>,而select元素沒有正確配置ResultMap,或者只配置ResultType!
5、以上問題都沒有,但是還是不行,可能原因就是,沒有構建進去,打開target看看對應的mapper.xml文件在不在
如果不在的話,clean一下,maven項目,然后再啟動。
6、pom.xml文件中配置resource,不然mapper.xml文件就會被漏掉!pom.xml的中配置了resource,bug消失了~
<!-- 如果不添加此節點mybatis的mapper.xml文件都會被漏掉。 -->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
7、mapper-locations路徑配置不對:
// 原配置如下:
mybatis: mapper-locations: classpath:signin\src\main\resources\mapperxmlmapperxml/.xm
//此為絕對路徑。修改配置路徑如下:
mybatis: mapper-locations: classpath:mapperxml/.xml
之前是絕對路徑所以掃描不到,修改了之后再編譯,項目代碼就不是之前的絕對路徑了,已經到target目錄下了。