出现 这种 问题 明显 是 mapper.xml文件 没有被 加载 。
SqlSessionFactoryBean 并没有加载到对应的mapper xml文件,当然执行方法的时候也就找不到dao所对应的mapper,而无法执行对应的sql,查看maven target 的classes目录下也并没有mapper的xml文件出现。
原因:mapper文件并不是放在resource中,而是在java目录,maven编译的时候并没有把xml文件编译进来。
解决:在pom文件中添加resource编译
<resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.yml</include> <include>**/*.tld</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources>
参照网上的几点建议,也有 可能 有一些别的 原因 :
1、<mapper namespace="com.prcsteel.peanut.dao.UserDao">
mapper文件namespace和dao路径对应
2.UserDao的方法在UserMapper.xml中没有,然后执行UserDao的方法会报此
3、UserDao的方法返回值是List,而select元素没有正确配置ResultMap,或者只配置ResultType!
4、如果你确认没有以上问题,请任意修改下对应的xml文件,比如删除一个空行,保存.问题解决…
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。
在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。
①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。
②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。