配置了mapper-locations依旧报错Invalid bound statement (not found)
时间: 2024-03-01 21:48:46 浏览: 229
当配置了`mapper-locations`后,仍然报错"Invalid bound statement (not found)",通常是由于以下几个原因导致的:
1. `mapper-locations`路径配置错误:请确保`mapper-locations`属性中指定的路径是正确的。路径可以是相对路径或绝对路径,相对路径是相对于classpath的。
2. XML文件命名错误:请确保XML文件的命名与`mapper-locations`属性中指定的文件名一致,并且文件后缀为`.xml`。
3. XML文件位置错误:请确保XML文件位于`mapper-locations`属性指定的路径下。如果XML文件位于classpath下的某个目录中,可以使用相对路径或绝对路径来指定。
4. XML文件中的namespace与接口或类不匹配:请确保XML文件中的namespace与接口或类的全限定名一致。如果不一致,会导致无法找到对应的SQL语句。
5. SQL语句的id与接口或类中的方法名不匹配:请确保XML文件中SQL语句的id与接口或类中的方法名一致。如果不一致,会导致无法找到对应的SQL语句。
6. XML文件中没有定义对应的SQL语句:请确保XML文件中定义了与接口或类中方法对应的SQL语句。如果没有定义,会导致无法找到对应的SQL语句。
如果以上几点都没有问题,还是报错"Invalid bound statement (not found)",可能是其他原因导致的,可以提供更多的错误信息或代码片段,以便更好地帮助你解决问题。
相关问题
若依整合mybatis-plus报错Invalid bound statement (not found)
### 若依整合 MyBatis-Plus 出现 Invalid bound statement (not found) 错误的解决方案
在若依框架中整合 MyBatis-Plus 时,如果出现 `Invalid bound statement (not found)` 错误,通常是由于 Mapper 接口与对应的 XML 文件未正确绑定或配置问题引起的。以下是可能的原因及解决方法:
#### 1. 检查 Mapper 接口的包路径是否被扫描
确保 MyBatis-Plus 的 Mapper 接口所在的包路径已被 Spring Boot 正确扫描。可以在 `application.yml` 或 `application.properties` 中配置扫描路径[^1]。
```yaml
mybatis-plus:
mapper-locations: classpath*:mapper/**/*Mapper.xml
type-aliases-package: com.ruoyi.project.system.domain
```
如果使用的是注解方式,则需要确认接口上是否有 `@Mapper` 注解,并且在启动类上添加了 `@MapperScan` 注解以指定扫描路径[^3]。
```java
@MapperScan("com.ruoyi.project.system.mapper")
@SpringBootApplication
public class RuoYiApplication {
public static void main(String[] args) {
SpringApplication.run(RuoYiApplication.class, args);
}
}
```
#### 2. 确保 Mapper 接口继承了正确的父类
MyBatis-Plus 的 Mapper 接口需要继承 `BaseMapper<T>`,并且导入的包必须是 `com.baomidou.mybatisplus.core.mapper.BaseMapper` 而不是旧版本中的 `com.baomidou.mybatisplus.mapper.BaseMapper`[^3]。
```java
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
```
#### 3. 验证 XML 文件路径和命名是否正确
MyBatis-Plus 的 Mapper 方法可以基于注解实现,也可以通过 XML 文件定义 SQL 语句。如果使用 XML 文件,则需要确保以下几点:
- XML 文件的命名必须与 Mapper 接口名称一致,例如 `UserMapper.java` 对应的 XML 文件名为 `UserMapper.xml`。
- XML 文件必须存放在 `resources/mapper/` 目录下,并且路径与 `application.yml` 中的 `mapper-locations` 配置一致[^1]。
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.project.system.mapper.UserMapper">
<!-- 定义 SQL 语句 -->
</mapper>
```
#### 4. 检查 MyBatis-Plus 版本兼容性
确保若依框架使用的 MyBatis-Plus 版本与项目中的依赖版本一致。如果版本不匹配,可能会导致无法找到绑定的 SQL 语句。可以通过 `pom.xml` 或 `build.gradle` 检查依赖版本[^2]。
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
```
#### 5. 验证方法签名是否正确
如果调用的 Mapper 方法未在接口中定义,或者方法签名与 XML 文件中的 SQL 声明不匹配,也会引发此错误。例如,调用了 `selectList` 方法,但 XML 文件中并未定义该方法的 SQL[^2]。
```java
// Mapper 接口中定义的方法
List<User> selectList(@Param("ew") Wrapper<User> wrapper);
```
```xml
<select id="selectList" resultType="com.ruoyi.project.system.domain.User">
SELECT * FROM user WHERE ${ew.customSqlSegment}
</select>
```
#### 6. 清理缓存并重新部署
有时,IDE 或构建工具的缓存可能导致资源文件未正确加载。建议清理项目并重新部署以排除此类问题。
```bash
mvn clean install
```
---
### 示例代码
以下是一个完整的示例,展示如何在若依框架中正确配置 MyBatis-Plus:
```java
// Mapper 接口
@Mapper
public interface DepartmentMapper extends BaseMapper<Department> {
}
// application.yml 配置
mybatis-plus:
mapper-locations: classpath*:mapper/**/*Mapper.xml
type-aliases-package: com.ruoyi.project.system.domain
// XML 文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.project.system.mapper.DepartmentMapper">
<select id="selectList" resultType="com.ruoyi.project.system.domain.Department">
SELECT * FROM department
</select>
</mapper>
```
---
###
使用@Mapper(compentModel=spring) 报错invalid bound statement(not found)
你在使用MyBatis的`@Mapper`注解,并指定`componentModel=spring`时遇到了"invalid bound statement (not found)"错误,这通常意味着Spring Boot无法找到对应的SQL映射(bound statement)。
首先,确认以下几个方面:
1. **映射文件位置**:`@Mapper`注解的类需要一个对应的XML或者Java配置的Mapper接口。确保mapper.xml文件位于resources/mapper目录下,或者Java接口正确地扫描到了。
```java
@Mapper(componentModel = "spring")
public interface YourMapper {
// 方法声明...
}
```
对应的xml映射文件:
```xml
<!-- your-mapper.xml -->
<mapper resource="your-mapper.xml"/>
```
2. **命名空间与接口**:在XML中,记得给每个接口提供一个唯一的namespace(命名空间),并在`@Mapper`注解中匹配上。
```xml
<mapper namespace="com.example.yourpackage.YourMapper">
<!-- SQL mapping definitions... -->
</mapper>
```
3. **方法映射**:确保在你的Mapper接口中,每个数据库操作都有相应的映射方法。例如,如果你有一个`selectById`方法,XML里要有对应的方法名。
4. **Spring配置**:在Spring Boot的配置文件(application.properties或application.yml)中,配置了mybatis-spring-boot-starter。例如:
```properties
mybatis.spring.mapper-locations=classpath:mapper/*.xml
```
如果以上都正确,但仍然报错,可能是某个方法没有正确映射到XML或者方法名拼写错误,需要检查具体的映射方法定义。如果还有疑问,可以在Spring的`logging.level.org.apache.ibatis.session=DEBUG`设置日志级别来获取更详细的错误信息,以帮助定位问题。
阅读全文
相关推荐















