xxxService.getById查询结果为空

本文讲述了在使用Mybatis-Plus框架时,遇到查询结果为空的问题,原因在于pojo中的逻辑删除字段默认值与数据库设置不符。解决方法是在@TableLogic中调整未删除值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mybatis-plus框架

使用xxxService.getById()时查询结果为空,但是程序没有报错。

于是对该查询debug,发现日志打印的sql语句为select xxx from table.name where table.id = id and table.del =0。

检查pojo才发现在private Integer del;这个成员变量上面使用了@TableLogic 逻辑删除,他的默认未删除值为0,而我的数据库未删除默认值设置为的1,所以查询不出数据。

只需要在@TableLogic(deval = " " , val = " ")设置未删除与已删除的值就可以了。

<think>嗯,我现在遇到了MyBatis的Invalid bound statement (not found)错误,得想办法解决。首先,根据用户提供的引用信息,可能的原因有几个方面。比如,XML文件没被正确加载,或者是Mapper接口和XML的命名不一致,还有可能是包扫描的问题。 先看第一个引用,用户提到在Service层调用方法时出现这个错误,比如studentService.list(null)报错。这可能是因为MyBatis没有找到对应的Mapper语句。这时候应该检查XML文件是否存在,路径是否正确。通常,Mapper接口和XML文件需要在同一个包下,并且名称要一致,比如StudentMapper.java和StudentMapper.xml。如果项目结构是Maven的,还要注意资源文件的配置是否正确,确保XML文件被打包到target里。 第二个引用提到在IDEA中运行正常,但打包后出错。这可能是因为打包时XML文件没有被正确包含进去。需要检查pom.xml中的资源过滤配置,确保src/main/java下的XML文件也被复制到classpath中。有时候Maven默认不会打包src/main/java下的非Java文件,所以需要显式配置资源插件。 第三个引用指出启动类没有正确扫描到Mapper包。Spring Boot的启动类应该使用@MapperScan注解指定Mapper接口所在的包。如果包路径没写全,或者扫描的层级不够,就会导致MyBatis找不到对应的接口。比如,如果Mapper接口在com.example.mapper,而@MapperScan只写到com.example,可能漏掉了子包,需要明确指定basePackages。 第四个引用提到@MapperScan必须扫描到具体的包路径。比如,正确的做法是@MapperScan("com.atdession.mapper"),如果只写到com.atdession,可能无法找到mapper接口。此外,还要确认接口是否有@Mapper注解,或者在配置中启用了自动扫描。 总结下来,解决步骤应该是: 1. 检查XML文件路径和命名是否正确,与Mapper接口对应。 2. 确保XML文件被正确打包到classpath,检查pom.xml的资源配置。 3. 确认启动类使用了正确的@MapperScan,扫描到具体的Mapper包。 4. 检查MyBatis配置,如mybatis.mapper-locations是否正确指向XML文件。 5. 其他可能的问题,比如方法名是否匹配,是否有语法错误等。 可能还需要查看生成的target目录,确认XML文件是否存在,或者清理项目重新编译。如果使用IDEA,有时候缓存问题也可能导致错误,可以尝试重启或清理缓存。另外,查看完整的错误日志,看是否有更详细的信息,比如具体的SQL语句ID,帮助定位问题。</think>### MyBatis出现 `Invalid bound statement (not found)` 错误的解决方案 该错误通常由 **Mapper接口与XML文件未正确绑定** 引起,以下是逐步排查方法: --- #### 1. **检查XML文件路径与命名** - **命名规则**:确保XML文件名与Mapper接口名一致。例如,接口为 `UserMapper.java`,XML文件应为 `UserMapper.xml`。 - **路径规则**:XML文件需与Mapper接口在同一包路径下。若接口在 `com.example.mapper`,XML应在 `resources/com/example/mapper` 目录下[^3][^4]。 --- #### 2. **验证XML文件是否被正确加载** - **Maven配置**:在 `pom.xml` 中添加资源过滤配置,确保XML文件被打包到 `target/classes`: ```xml <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*</include> </includes> </resource> </resources> </build> ``` - **验证生成目录**:检查编译后的 `target/classes` 中是否存在XML文件[^2]。 --- #### 3. **检查包扫描配置** - **启动类注解**:在Spring Boot启动类添加 `@MapperScan`,明确指定Mapper接口的包路径: ```java @SpringBootApplication @MapperScan("com.example.mapper") // 需替换为实际包名 public class Application { ... } ``` - **避免层级遗漏**:若Mapper接口位于子包(如 `com.example.mapper.user`),需确保扫描路径覆盖到具体层级[^3]。 --- #### 4. **核对XML中的SQL ID与接口方法名** - **严格匹配**:XML中SQL语句的 `id` 必须与Mapper接口的方法名完全一致。例如: ```xml <!-- UserMapper.xml --> <select id="selectUserById" resultType="User"> SELECT * FROM user WHERE id = #{id} </select> ``` 对应接口方法: ```java public interface UserMapper { User selectUserById(Long id); } ``` - **避免特殊字符**:方法名中不要包含 `$` 或格[^1][^2]。 --- #### 5. **检查MyBatis配置** - **配置文件**:在 `application.yml` 中指定XML路径: ```yaml mybatis: mapper-locations: classpath*:mapper/**/*.xml type-aliases-package: com.example.model ``` - **清理缓存**:删除 `target` 目录并重新编译项目。 --- #### 6. **其他可能原因** - **依赖冲突**:检查是否存在多个MyBatis版本冲突。 - **注解遗漏**:确保Mapper接口添加了 `@Mapper` 或 `@Repository` 注解。 --- ### 相关问题 1. **如何排查MyBatis的SQL语句执行失败问题?** - 开启MyBatis日志(`logging.level.com.example.mapper=DEBUG`),检查生成的SQL是否符合预期。 2. **MyBatis Plus与原生MyBatis混合使用时需要注意什么?** - 避免Mapper接口命名冲突,需分开配置扫描路径[^4]。 3. **为什么单元测试通过但部署后报错?** - 检查打包配置(如 `pom.xml` 中资源过滤),确保生产环境与开发环境路径一致[^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值