出现异常后,就开始了漫长的网络搜索解决方案之旅,可以查到很多这种异常的相关博客或说明,但基本内容都差不多.也在网上查了好久,就是不知道原因:网上说的也大同小异,下面有我在网上查到的解释,以及我自己的总结:
,通常可能导致这个异常出现的原因有以下几种:
(1) mapper接口类和mapper.xml是否在同一个包下,文件名称是否一致(仅后缀不同):经过实际检验,这个并不需要在同一个包下面,通常mapper.xml文件是存放在src/main/resources目录下,而mapper接口类是在src/main/java目录下面;名称是否相同也不重要,我的命名分贝为NumberDao.java和NumberMapper.xml,实际也可以运行成功
(2)mapper.xml的namespace是否是对应接口类的全名(包括包名和类名):这个是必须要保证相同,需要进行检查,而且全类名最好通过复制,不要自己手动拼写,容易出错
(3)mapper接口类的方法名是否与mapper.xml中sql标签的id相同:这个也需要进行检查,必须保证一致
(4)mapper.xml文件中用resultMap,而不用resultType(当sql操作结果是List或其他复杂结果集时):我经过实践检验,我的查询结果是一个Integer的List集合,用resultMap反而报错,异常信息如下:
(5) 到target目录下看是否有mapper.xml文件生成(按照自己对mapper.xml文件的路径配置到target下classes目录下找),如果没有可以
1. <resources>
2. <resource>
3. <directory>src/main/resources</directory>
4. <includes>
5. <include>**/*.xml</include>
6. </includes>
7. </resource>
8. </resources> . .
在pom.xml文件的之间添加
也可以再在之间再添加一项
-
<resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource>
使mapper.xml文件不论是放在src/main/resources或src/main/java下都可以被打包到classes目录下。
搜了许多,终于找到了答案,的确是xml映射文件的问题,在代码生成器后,拷贝代码时,xml映射文件没有拷贝,才导致报错