1.问题实质:dao层(又叫mapper接口)与mapper.xml文件映射关系配置错误
2.问题原因: (1) dao层的方法和mapper.xml中的方法不一致(具体表现在方法名写错;方法参数路径写错,实体路径写错)
(2) mapper中的namespace、resultParameter 和对应的dao层entity层不一致
(3) 系统找不到mybatis的xml文件
3.解决思路:如果是因为粗心大意漏写多写的话就自己仔细检查检查,如果是问题3的话则需要检查一下xml文件是否被扫描到
4.解决步骤:
1)检查xml文件所在的package名称是否和interface对应的package名称一一对应
2)检查xml文件的namespace是否和xml文件的package名称一一对应
3)检查函数名称能否对应上
4)去掉xml文件中的中文注释
5)随意在xml文件中加一个空格或者空行然后保存
如果以上都无法解决问题,则检查Spring包扫描配置
1)打开spring-context.xml
2)找到class为org.mybatis.spring.SqlSessionFactoryBean 这个bean
3)找到name为mapperLocations的property
4)在list标签中添加一个value
eg:
<value>classpath:/info/mapper/**/*.xml</value>
然鹅我仔细检查了好久,灰常确认没有漏写、包扫描配置也没有问题,最终发现了一个大坑。
经过一番折腾发现问题出在Maven项目的resource文件夹上
需要把它右键->make directory as 变为resources root
此问题产生原因是因为maven项目的约定配置文件必须放resources里,src目录下的xml文件默认不会编译到target。由于我是手动创建的resource文件夹并没有在系统中设置标记,才导致了该问题的发生,该问题是咱们没有遵循idea对classpath的规范。原来Maven 为我们提供了一致的项目目录配置(源文件夹、资源文件夹等),在自动构建项目时, Maven 会按照这个配置来执行操作(编译源文件、拷贝资源文件),手动把resource设置后,问题解决。
------------------------------------------------------------------------------------------------------------------------
今天又遇到这个问题了,以上办法都不能解决。。。看以下两幅图
看似两个一毛一样的路径,右键Show in Explorer
在本地磁盘上就不是一样的了。。。原来图一我是一层一层建的目录,图二是一次性建的目录(直接一次性输入com.xxx.xxx.mapper.modular.yearcheck,resources目录下新建路径为com/xxx/xxx/mapper/modular/yearcheck),所以Springboot就扫不到xml了。。。