排错:Mybatis Invalid bound statement (not found): com.XXXX.dao.mapper.UserDao.selectAllUser

出现 这种 问题 明显 是 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和dao路径对应

  1. 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不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。

posted @ 2021-11-23 09:23  一刹流云散  阅读(445)  评论(1编辑  收藏  举报