org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

Spring集成Mybatis,运行报错:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

错误原因:

mybatis的mapper文件存在错误,或者与Dao层的类型不一致,也可能是没有检测到mapper文件

 

解决方法:

一、仔细检查文件,确保:

0.检查 mapper.xml 和 mapper.java 的文件路径,是否正确。

1、mapper.xml文件中的namespace对应实体类。还有数据类型与对象属性一致。

2、mapper.xml文件中的sql对应的 id与dao层方法名称一致,如示例中,名称都是findIdByUserName。参数类型都是String

3、mapper.xml中的sql的结果类型resultType(或者是resultMap)与dao层方法返回类型一致, parameterType和参数类型也一致。如示例中,都是 String 。

4、Service层的类上方,是否添加了@Service注解。

5.  报错的类上方,是否有@Component等注解,表明属于Spring管理。

本人在做单元测试时,使用了@Autowired注解,而该单元测试类没有@Component注解,所以一直报错。

改用java自带的@Resource注解就可以了。

 

示例如下:

 

UserMapper.xml

 

  <select id="findIdByUserName" resultType="java.lang.String" parameterType="java.lang.String" >
      select uid  from user_info where username=#{userName }
  </select>

 

UserDao.java

 

public interface UserDao {
    String findIdByUserName(String userName);
}

 

注意:如果sql 的结果集为  resultMap="BaseResultMap",那么dao层方法返回类型应该是实体类

 

 

二、查找项目生成的classes文件,看是否生成mapper文件,如下示:

如果没有生成mapper文件,那么可能是mybatis的配置文件有问题。

spring-mybatis文件查看扫描位置是否正确。

<!-- spring和MyBatis整合 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 自动扫描mapping.xml文件 -->
        <property name="mapperLocations" value="classpath*:mapping/*Mapper.xml"></property>
</bean>

如果是通过properties文件或者yml文件配置mybatis,则修改mapperlocations变量的值。

posted on   乐之者v  阅读(583)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示