org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)排查步骤及解决方法

问题:

springboot3 + mybatis-pls + mysql 的后端项目,
新增一个获取数据的方法,test测试的时候报错:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
找不到对应的mapper

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.user_service.mapper.SysUserMapper.getPublicPermissionsByUserId

原因

由于 MyBatis 没有找到 Mapper XML 文件中的 SQL 语句或 Mapper 方法未正确绑定

排查步骤

1. 确认 mapper.xml 文件的位置

确保 mapper.xml 文件放置在正确的位置。通常,mapper.xml 文件应该位于 src/main/resources 目录下的一个子目录,如 src/main/resources/mapper

示例项目结构:

src
├── main
│   ├── java
│   │   └── com
│   │       └── user_service
│   │           └── mapper
│   │               └── SysUserMapper.java
│   ├── resources
│   │   └── mapper
│   │       └── SysUserMapper.xml
2. 检查 mapper.xmlnamespace 配置

mapper.xml 文件中,确保 namespace 属性与 Mapper 接口的全限定类名完全一致:

SysUserMapper.xml:

<mapper namespace="com.user_service.mapper.SysUserMapper">
    <select id="getPublicPermissionsByUserId" resultType="java.lang.String">
        SELECT p.permission_name
        FROM user_permissions p
        JOIN users u ON p.user_id = u.id
        WHERE u.id = #{userId}
    </select>
</mapper>
3. 验证 Mapper 接口方法名

确保 Mapper 接口中的方法名与 mapper.xml 文件中的 <select> 元素的 id 属性一致:

SysUserMapper.java:

package com.user_service.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.user_service.entity.SysUser;
import java.util.List;

public interface SysUserMapper extends BaseMapper<SysUser> {
    List<String> getPublicPermissionsByUserId(Long userId);
}
4. 配置 mapper-locations 属性

application.propertiesapplication.yml 中正确配置 mapper-locations 属性,使其指向 mapper.xml 文件所在的位置:

application.properties:

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

application.yml:

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

如果你的 mapper.xml 文件放在了 src/main/java 下,则需要调整路径配置,但通常建议将 XML 文件放在 src/main/resources 目录中。

5. 检查 SqlSessionFactory 配置

确保 SqlSessionFactory 能够扫描到 Mapper XML 文件。如果你有自定义配置类,确保其正确配置:

示例 MybatisPlusConfig 类:

package com.user_service.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("com.user_service.mapper")
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}
6. 重新构建项目

清理并重新构建项目,以确保配置和文件更改生效:

使用 Maven:

mvn clean install

使用 Gradle:

./gradlew clean build
7. 检查日志

启动项目后,检查日志输出以确保 MyBatis-Plus 配置正确,XML 文件和 Mapper 接口都被正确加载。日志中通常会有关于 MyBatis 配置和 SQL 语句加载的提示信息。

8. 重新验证问题

完成以上步骤后,再次运行项目,确认错误是否解决。如果问题仍然存在,请检查项目结构和配置是否与实际情况一致。

希望对你有所帮助,若有问题欢迎指正~😊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值