zoukankan      html  css  js  c++  java
  • 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文件

    解决方法:

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

    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变量的值。

  • 相关阅读:
    Python-PyQt5-图形可视化界面(5)--打开文件或文件夹--QFileDialog
    python opencv图片拼接源码
    python numpy库矩阵运算的功能
    stm32定时器/定时器中断/PWM输出/输入捕获
    STM32 串口/中断
    STM32F4 IO
    STM32F4 时钟树概述
    MDK5新建工程/MDK5 使用技巧/STM32F4 在线调试
    使用 LocalDate 过滤掉工作日
    斐波拉契数列(Lambda表达式)
  • 原文地址:https://www.cnblogs.com/expiator/p/8620095.html
Copyright © 2011-2022 走看看