问题:
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.xml
的 namespace
配置
在 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.properties
或 application.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. 重新验证问题
完成以上步骤后,再次运行项目,确认错误是否解决。如果问题仍然存在,请检查项目结构和配置是否与实际情况一致。
希望对你有所帮助,若有问题欢迎指正~😊