导致Invalid bound statement (not found)问题排查

一、mapper.xml中的namespace和实际的mapper文件不一致

二、mapper接口中的方法名和mapper.xml中的id标签不一致

三、target中没有打包到xx.xml或者dao

四、.xml不在resources目录下,例如在src/main/java,则需要maven加上

    <!--在build中配置resources,来防止我们资源导出失败的问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

五、多模块引用的情况下,如A模块引用B模块,那么需要在A模块配置中心修改mybatis的locations属性,classpath加上*。注意如果用的mybatis-plus需要修改plus的属性,直接修改mybatis是不生效的

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

### 解决方案 `Invalid bound statement (not found)` 是 MyBatis 中常见的错误之一,通常表示无法找到对应的 Mapper 方法或其关联的 SQL 语句。以下是可能的原因及其解决方案: #### 可能原因及解决办法 1. **Mapper 接口未被正确扫描** 如果 `UserMapper` 接口所在的包不在 MyBatis 配置文件中指定的扫描路径范围内,则会引发此问题。可以通过在配置文件中显式声明接口所在位置来解决问题[^1]。 ```xml <mappers> <mapper class="com.chaoyue.mybatis.mapper.UserMapper"/> </mappers> ``` 2. **XML 文件命名不匹配** 确保 XML 文件名与 Mapper 接口名称一致,并且位于同一目录下。如果两者不同步,MyBatis 将无法加载相应的 SQL 映射文件[^1]。 3. **SQL ID 不匹配** 检查 XML 文件中的 `<select>` 或其他标签的 `id` 属性是否与调用的方法名完全相同。例如,在 `UserMapper.xml` 中应有如下定义: ```xml <select id="findAll" resultType="com.chaoyue.mybatis.model.User"> SELECT * FROM users; </select> ``` 4. **资源未正确加载** 若项目使用的是 Maven 构建工具,请确认 `resources` 目录下的映射文件已被打包到最终 JAR/WAR 文件中。可以在 `pom.xml` 中添加以下配置以确保资源不会遗漏[^1]: ```xml <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build> ``` 5. **Spring 上下文中缺少 Bean 定义** 当使用 Spring 整合 MyBatis 时,需保证 Mapper 被注册为 Spring 的 Bean。可通过注解方式实现自动扫描: ```java @MapperScan("com.chaoyue.mybatis.mapper") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 6. **动态 SQL 错误** 如果涉及复杂查询并采用 MyBatis 动态 SQL 技术,则可能存在语法或者逻辑上的缺陷。利用提供的九种动态 SQL 标签(如 `<if>, <choose>, <trim>` 等),结合 OGNL 表达式构建条件分支时要格外小心,避免因参数传递不当而导致运行期异常[^2]。 通过以上分析逐一排查即可定位具体成因并修复该类问题。 ```java // 测试代码片段用于验证 findAll 是否正常工作 @Autowired private UserMapper userMapper; @Test public void testFindAllUsers() { List<User> userList = userMapper.findAll(); assertNotNull(userList); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱钓鱼的程序员小郭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值