关于IDEA下创建SSM项目,出现的org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

本文解决在使用Maven搭建SSM框架时遇到的org.apache.ibatis.binding.BindingException异常问题,详细介绍了配置SqlSessionFactory、动态代理接口及资源扫描的正确方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

         利用maven搭建SSM框架时,出现了org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题。

解决思路:

  1. 逆向工程生成的mapper.java和mapper.xml一般不会错,除非自己配置错误
  2.     
        配置SqlSessionFactory以及动态代理接口
    
        <!-- SqlSessionFactory配置 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <!-- 加载mybatis核心配置文件 -->
            <property name="configLocation" value="classpath:sqlMapConfig.xml" />
            <!-- 别名包扫描 -->
            <property name="typeAliasesPackage" value="com.rvelamen.springmvc.pojo" />
        </bean>
    
        <!-- 动态代理,第二种方式:包扫描(推荐): -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!-- basePackage多个包用","分隔 -->
            <property name="basePackage" value="com.rvelamen.springmvc.mapper" />
        </bean>

    3.

       自动扫描了resources目录下的文件,无法扫描*Mapper.xml文件,同时无法将配置文件加载到classes目录
       
        <resources>
          <resource>
            <directory>src/main/java</directory>
            <includes>
              <include>**/*.properties</include>
              <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
          </resource>
          <resource>
            <directory>src/main/resources</directory>
          </resource>
        </resources>

     

### 解析 MyBatis BindingException 错误 当遇到 `org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)` 的异常时,通常意味着 MyBatis 无法找到指定的 SQL 映射语句。对于特定于 `com.ml.dao.UserMapper.selectByPrimaryKey` 方法的情况,可能原因如下: #### 原因分析 1. **XML 文件位置不正确** 如果 XML 配置文件不在预期目录下,则 Mapper 接口中的方法将不会被识别。确保 XML 文件位于资源路径下的适当包结构内[^4]。 2. **命名空间定义错误** Mapper XML 文件内的 `<mapper>` 标签应具有正确的 namespace 属性值,该属性需与接口全限定名一致。例如: ```xml <mapper namespace="com.ml.dao.UserMapper"> ``` 3. **SQL ID 不匹配** 确认 XML 中定义的 select 语句 id 是否完全符合 Java 接口中声明的方法名称。任何大小写差异都可能导致此问题发生[^5]。 4. **扫描配置缺失** Spring 或 MyBatis 扫描器未能加载自定义 Mapper 接口及其对应的 XML 资源。检查应用程序上下文中是否已正确定义了 mapper scan 包路径[^3]。 #### 实践建议 为了排查并修复上述提到的各种可能性,可以采取以下措施来解决问题: - 审查项目构建工具(如 Maven/Gradle)设置,确认 resources 目录已被标记为编译输出的一部分; - 使用 IDE 插件辅助验证 Mapper 和其关联 XML 文档之间的关系; - 尝试简化测试案例,在最小化环境中重现问题以便更容易定位根本原因。 ```java // Example of a correct method signature within the UserMapper interface. public interface UserMapper { @Select("SELECT * FROM users WHERE user_id=#{id}") User selectByPrimaryKey(Integer id); } ``` ```xml <!-- Corresponding part from the UserMapper.xml --> <mapper namespace="com.ml.dao.UserMapper"> <!-- Ensure this matches exactly with what's defined in your DAO layer --> <select id="selectByPrimaryKey" resultType="com.ml.model.User"> SELECT * FROM users WHERE user_id = #{id} </select> </mapper> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值