BingdingException:Invalid bound statement(亲测有效)

本文介绍了一种常见的BingdingException错误:Invalidboundstatement,并提供了解决方案。通过正确配置pom.xml中的mapperxml文件路径及重新编译项目,可以有效解决此问题。

BingdingException:Invalid bound statement

一般出现这种状况就要考虑到sql语句是否写错,或者是否与maven加载机制有关

解决:

在这里插入图片描述

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

配置mapper xml文件的路径,在pom.xml文件中添加

mybatis-plus.mapper-locations=classpath:ncu/xfb/eduservice/mapper/xml/*.xml

然后将maven项目重新编译一下,问题解决。

### 问题分析 在使用 MyBatis 时,如果出现 `org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)` 异常,通常表明 MyBatis 无法找到对应的 SQL 映射语句。这个问题通常出现在 Spring Boot 项目中,尤其是在整合 MyBatis 后,调用 Mapper 接口方法时无法正确绑定 XML 文件中的 SQL 语句。 #### 常见原因 1. **Mapper 接口与 XML 文件映射不匹配**: - Mapper 接口的方法名与 XML 文件中 `<select>`、`<insert>`、`<update>` 或 `<delete>` 标签的 `id` 不一致。 - XML 文件中 `<mapper>` 标签的 `namespace` 属性没有正确指向对应的 Mapper 接口类路径。 2. **MyBatis 配置问题**: - Spring Boot 配置文件(如 `application.yml` 或 `application.properties`)中未正确配置 `mybatis.mapper-locations`,导致 MyBatis 无法加载对应的 XML 文件。 - 如果使用了多数据源,可能没有正确配置 `SqlSessionFactory` 和 `MapperScannerConfigurer`,导致某些 Mapper 无法正确注册。 3. **拼写错误或路径错误**: - Mapper 接口方法名、XML 文件中的 SQL ID 或 XML 文件路径存在拼写错误。 - XML 文件未放置在资源目录(如 `resources`)下的正确路径中。 4. **MyBatis Plus 特有情况**: - 如果使用了 MyBatis Plus,可能由于 `MybatisMapperMethod` 的重写导致问题,需要检查是否正确配置了 `MyBatis` 的扫描路径和映射规则。 #### 解决方案 ##### 1. 检查 Mapper 接口与 XML 文件的映射关系 确保 Mapper 接口中的方法名与 XML 文件中 `<select>`、`<insert>` 等标签的 `id` 属性一致,并且 `<mapper>` 标签的 `namespace` 属性指向 Mapper 接口的全限定类名。例如: ```java public interface NewsDetailMapper { List<NewsDetail> selectByExample(NewsDetailExample example); } ``` 对应的 XML 文件内容如下: ```xml <mapper namespace="com.team.news.mapper.NewsDetailMapper"> <select id="selectByExample" resultType="com.team.news.model.NewsDetail"> SELECT * FROM news_detail </select> </mapper> ``` ##### 2. 配置 `mybatis.mapper-locations` 在 `application.yml` 或 `application.properties` 中配置 `mybatis.mapper-locations`,确保 MyBatis 能正确加载 XML 文件。例如,在 `application.yml` 中配置如下: ```yaml mybatis: mapper-locations: classpath:mappings/**/*.xml ``` 如果使用了多个数据源,需要为每个数据源配置对应的 `SqlSessionFactory` 和 `MapperScannerConfigurer`。例如: ```java @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath:mappings/news/*.xml")); return sessionFactory.getObject(); } @Bean public MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer configurer = new MapperScannerConfigurer(); configurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); configurer.setBasePackage("com.team.news.mapper"); return configurer; } ``` ##### 3. 检查 XML 文件路径和拼写错误 确保 XML 文件放置在 `resources` 目录下的正确路径中,并且文件名与接口名一致。例如,`NewsDetailMapper.xml` 应该放在 `resources/mappings/com/team/news/mapper/` 路径下。 ##### 4. 使用 MyBatis Plus 时的特殊处理 如果使用了 MyBatis Plus,需要确保 `MyBatis` 的配置与 `MyBatis Plus` 兼容。例如,在 `application.yml` 中配置如下: ```yaml mybatis-plus: mapper-locations: classpath:mappings/**/*.xml type-aliases-package: com.example.model ``` 同时,确保 `MyBatis` 的 `SqlSessionFactory` 和 `MapperScannerConfigurer` 正确配置。 ##### 5. 检查日志输出 启用 MyBatis 的日志输出,查看是否加载了正确的 XML 文件。可以在 `application.yml` 中配置日志输出: ```yaml logging: level: com.team.news.mapper: debug ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码超人牛爱芳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值