解决SpringBoot整合Mybatis和Mybatis-Plus不能公用(版本兼容性问题)

简介: 笔记

1 前言


虽然Mybatis-Plus很好使,可以帮助我们生成CRUD的接口,但是有的情况下我们需要联合其他表进行多表查询,这时候Mybatis可以手写SQL的优势就体现出来了,一般在开发中,很多项目都是Mybatis和Mybatis-Plus公用的,但是公用也有有版本不兼容的问题


2 发现问题


今天打算使用SpringBoot整合Mybatis和Mybatis-Plus,但是发现不能共同


具体体现为:我手写了一个mapper.xml文件,然后使用接口去调用里面的sql,但是报了一个很经典的问题:


Invalid bound statement (not found): com.wyh.mapper.IUserMapper.queryAllUser

1.png

这个问题很常见。我相信不少后端开发都遇到过,意思是识别不了对应的mapper.xml


常见的发生场景可以参考我这篇文章:解决Mybatis报错并分析原因:Invalid bound statement (not found): com.xxx.mapper.xxx


3 分析问题


经过我一行行代码的调试,我敢肯定这个问题的原因不符合上述的任意一种情况


真的是一行行代码删除测试,一个类一个类的改动去测试,这是我的一个实体,去掉相关MP的代码

2.png

最终我定位到:是因为Mybatis和Mybatis-Plus不能公用,我认为是版本不兼容的问题


4 解决问题


如何证明是版本不兼容呢?

这是我报错的时候的依赖版本

3.png

会报错:

4.png

mybatis的版本我没有改动,只是将mybatis-plus的版本从3.1.1提升到了3.3.0

修改完版本后再次运行解决问题

5.png

这时候再把相关Mybatis-Plus的代码还原,哪怕同时编写Mybatis的sql和Mybatis-Plus自带的API都是可以的,没有任何问题

接口和方法名称写的比较糙。。。只是为了方便测试

image.pngimage.png

5 Mybatis和Mybatis-Plus的相关依赖:


    <!--  mybatis依赖    -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>
        <!--  mybatis-plus支持 -->
        <!--  如果想要同时使用mybatis,务必提高mybatis-plus的版本!!!      -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.0</version>
        </dependency

6 总结


目前我想到解决这个问题的版本就是提高Mybatis-Plus的版本去支持Mybatis,如果大家有别的办法欢迎评论!

最后不得不感叹:这种问题真的好难发现啊!!!

相关文章
|
7月前
|
XML Java Nacos
Spring Boot 整合Nacos 版本兼容适配 史上最详细文档
本文介绍SpringBoot整合Nacos的完整流程,涵盖Nacos下载安装、配置中心与服务发现集成、版本兼容性问题及实战配置。重点解决SpringBoot 3.3.0与Nacos版本适配难题,推荐使用Spring Cloud Alibaba方案,并提供项目开源地址供参考学习。
|
9月前
|
SQL 缓存 Java
Mybatis及MybatisPlus
MyBatis 是一款优秀的持久层框架,支持自定义 SQL、存储过程及高级映射。其系统架构通过 mybatis-config.xml 配置全局信息,结合 mapper.xml 映射 SQL 语句,构建 SqlSessionFactory 并创建 SqlSession 操作数据库。MyBatis 底层通过 Executor 执行器和 Mapped Statement 对象实现 SQL 的输入输出映射与执行。支持复杂结果集映射,
|
10月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1528 1
Spring boot 使用mybatis generator 自动生成代码插件
|
10月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
370 1
|
9月前
|
SQL Java 数据库连接
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
245 0
|
10月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
530 1
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
940 0
|
Java
记一次springboot版本升级问题
spring-boot-starter-parent 2.6.6
1408 0
记一次springboot版本升级问题
|
6月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。