org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.xx.mapper.XX.xxx

本文介绍了一种常见问题的解决方案,即在Spring Boot项目中,Mapper XML文件未能编译到target目录的问题。通过在pom.xml的build标签中添加资源配置,指向Mapper XML文件的位置,确保它们被正确编译。尽管application.properties已配置mybatis.mapper-locations,但此额外步骤仍为必要。

项目访问接口报错:

排查发现mapper文件没有编译进target,mapper目录下只有class文件没有mapper.xml:

解决方法:在build标签中使用<resources>标签指向mapper.xml文件位置

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>

重新编译,问题解决。不过仍然存在的疑问是之前在application.properties文件中已经配置了属性mybatis.mapper-locations来指向mapper.xml的文件目录,不知道为什么还要再pom中添加resource标签

### 解决 MyBatis `Invalid bound statement (not found)` 错误 当遇到 `org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)` 错误时,通常意味着 MyBatis 无法找到映射到特定命名空间下的 SQL 语句。此问题可能由多种因素引起。 #### 映射文件配置不正确 如果 Mapper 接口中的方法名称与其对应的 XML 文件内的 ID 不匹配,则会触发该异常。确保 Mapper 接口中定义的方法名与 XML 配置文件里的 `<select>` 或其他标签的 id 属性完全一致[^1]。 ```xml <!-- 正确 --> <mapper namespace="com.example.mapper.UserMapper"> <select id="getUserById" parameterType="int" resultType="User"> SELECT * FROM users WHERE user_id = #{id} </select> </mapper> // 对应 Java 方法签名也需保持同步 public interface UserMapper { User getUserById(int id); } ``` #### 资源加载失败 有时即使路径看起来是对的,但如果资源没有被正确打包进最终的应用程序包里(比如 JAR),也会导致此类错误发生。对于 Maven 构建工具来说,应该确认项目的 `pom.xml` 是否包含了合适的资源过滤规则来包含这些 XML 文件[^5]。 ```xml <build> <resources> <!-- 确保 resources 下面的 xml 文件会被编译进入 classpath --> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> </resources> </build> ``` #### 缺少必要的依赖项或版本冲突 某些情况下,可能是由于缺少了必需的库或者是不同版本之间的兼容性问题所引起的。检查应用程序使用的 MyBatis 及其扩展插件(如 MyBatis Plus)是否都处于最新稳定版,并且相互之间不存在版本差异[^2]。 #### 名字空间声明不当 在 XML 映射文档顶部指定的名字空间应当精确对应于相应的 DAO/Repository 类全限定类名。任何拼写上的失误都会造成找不到绑定语句的情况出现[^3]。 ```xml <!-- 错误示范 --> <mapper namespace="com.exmaple.userdao"> <!-- 注意这里 "exmaple" 的拼写 --> <!-- 正确方式 --> <mapper namespace="com.example.userDao"> ``` 完成上述调整之后,建议清理并重新构建整个工程以确保更改生效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值