Springboot 项目测试请求时总是报 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found),求大佬帮忙解决

14 天前
 tiRolin

我做了一个简单的 CURD 项目,但是这个项目测试接口时却总是报

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

这个问题困扰了我快一天了,我一直没能解决它 下面是我的部分 Controller 和 Service 相关的代码 Controller 的部分

@RestController
@RequestMapping("/private/user/baseTestUser")
public class BaseTestUserController {

    @Autowired
    private BaseTestUserService baseTestUserService;

    /**
     * 新增用戶
     * @param baseTestUserInsertBo 用戶插入請求對象
     * @return 新增用戶 id
     */
    @ApiOperation("增加用戶方法")
    @PostMapping("/add")
    @AvoidRepeatableCommit
    public ResponseDTO<Long> insert(
            @ApiParam(name = "BaseTestUserInsertBo",value = "用戶插入實體對象")
            @RequestBody @Valid BaseTestUserInsertBo baseTestUserInsertBo) {
        return ResponseDTO.ok(baseTestUserService.insert(baseTestUserInsertBo));
    }
}

Service 的部分

@Service
public class BaseTestUserService extends BaseService<BaseTestUserMapper, BaseTestUser> {

    @Autowired
    private BaseTestUserMapper baseTestUserMapper;

    @Transactional
    public Long insert(BaseTestUserInsertBo baseTestUserInsertBo) {
        BaseTestUser baseTestUser = baseTestUserInsertBo.toEntity();
        baseTestUser.setRoleID(1);
        exist(baseTestUser);
        insert(baseTestUser);
        return baseTestUser.getId();
    }

    /**
     * 用戶名唯一性檢查
     * @param baseTestUser 用戶對象
     */
    private void exist(BaseTestUser baseTestUser) {
        QueryWrapper<BaseTestUser> queryWrapper = new QueryWrapper<>();
//        queryWrapper.lambda().ne(baseTestUser.getId() != null, BaseTestUser::getId, baseTestUser.getId());
        queryWrapper.lambda().eq(BaseTestUser::getUsername, baseTestUser.getUsername());
        long count = this.count(queryWrapper);
        BaseTestUserErrorEnum.BASE_USER_EXIST_SAME_NAME_ERROR.isTrue(count>0);
    }
}

我觉得我的代码部分是没什么问题的,但是每次代码运行到 this.count(queryWrapper);这一行的时候就会报我上面所说的异常,但是我项目编译可以通过,我甚至可以按住 ctrl 进入到 count 的字节码文件里,按说是没问题的,但是却会报问题,我尝试了很多方法都没能解决这个问题,我实在是没法了,所以我来问问各位 下面是一些有关于我项目的更多内容,方便各位解决问题

首先我使用的 jdk 版本是 21 ,maven 版本是 3.5.3 我在 pom 文件中引入了 mybatis 相关依赖,具体内容如下

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>

事实上,我即使不引入这个依赖,在我的依赖中也已经存在 mybatis 和 mybatisplus 的相关内容了,但是我没引入这个依赖之前启动项目会报

Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

为了解决这个问题,我引入了这个依赖

下面是我的项目本体结构

我项目配置类的代码如下所示:

spring.application.name=jarlearning21

spring.datasource.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

server.port=8081

mybatis.mapper-locations= classpath*:org/example/jarlearning21/user/mapper/**/*.xml
mybatis-plus.type-aliases-package=org.example.jarlearning21.user.model.po

启动类的代码如下

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
@MapperScan("org.example.jarlearning21.user.mapper")
public class Jarlearning21Application {

    public static void main(String[] args) {
        SpringApplication.run(Jarlearning21Application.class, args);
    }
}

Mapper 的代码

public interface BaseTestUserMapper extends BaseMapper<BaseTestUser> {}

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="org.example.jarlearning21.user.mapper.BaseTestUserMapper">
</mapper>

以上就是所有内容,如果需要更多信息请随时跟我说,我会第一时间补充,先谢谢各位了

1612 次点击
所在节点    Java
26 条回复
tiRolin
11 天前
@montaro2017 我解决这个问题了,问题的原因是 SpringBoot3 的版本一旦配合使用内嵌的 mybatis3 就会导致这个错误,解决这个错误的方法是将 springboot 的版本降级为 3.1.6 同时引入下面的两个依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>3.5.3</version>
</dependency>
就可以完美解决该问题,之所以之前迟迟解决不了是因为一直怀疑是我的自己的配置出了问题,没想到问题是直接出在依赖上,这个依赖组合是存在未修复的 Bug 的
tiRolin
11 天前
@Edaa 我解决这个问题了,问题的原因是 SpringBoot3 的版本一旦配合使用内嵌的 mybatis3 就会导致这个错误,解决这个错误的方法是将 springboot 的版本降级为 3.1.6 同时引入下面的两个依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>3.5.3</version>
</dependency>
就可以完美解决该问题,之所以之前迟迟解决不了是因为一直怀疑是我的自己的配置出了问题,没想到问题是直接出在依赖上,这个依赖组合是存在未修复的 Bug 的
tiRolin
11 天前
@night98 我解决这个问题了,问题的原因是 SpringBoot3 的版本一旦配合使用内嵌的 mybatis3 就会导致这个错误,解决这个错误的方法是将 springboot 的版本降级为 3.1.6 同时引入下面的两个依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>3.5.3</version>
</dependency>
就可以完美解决该问题,之所以之前迟迟解决不了是因为一直怀疑是我的自己的配置出了问题,没想到问题是直接出在依赖上,这个依赖组合是存在未修复的 Bug 的
RedBeanIce
11 天前
在 springboot2 中,一般是你的 myabtis plus config 出了问题。
WilliamZeyar
7 小时 19 分钟前
springboot3 mybatis-plus 依赖问题,可以升级 mybatis-plus 到 3.5.7 版本,去掉其他 mybatis 依赖,我就是这么解决的。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.7</version>
</dependency>
WilliamZeyar
7 小时 18 分钟前
我的 springboot 版本是 3.3.3 mybatis-plus 版本 3.5.7

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1077591

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX