这个问题比较简单,其实出现这个问题实质就是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:signinsrcmain
esourcesmapperxmlmapperxml/.xm
//此为绝对路径。修改配置路径如下:
mybatis:
mapper-locations: classpath:mapperxml/.xml
之前是绝对路径所以扫描不到,修改了之后再编译,项目代码就不是之前的绝对路径了,已经到target目录下了。