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

  • 相关阅读:
    173. Binary Search Tree Iterator
    199. Binary Tree Right Side View
    230. Kth Smallest Element in a BST
    236. Lowest Common Ancestor of a Binary Tree
    337. House Robber III
    449. Serialize and Deserialize BST
    508. Most Frequent Subtree Sum
    513. Find Bottom Left Tree Value
    129. Sum Root to Leaf Numbers
    652. Find Duplicate Subtrees
  • 原文地址:https://www.cnblogs.com/expiator/p/8620095.html
Copyright © 2011-2022 走看看