写点什么

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

作者:不觉心动
  • 2023-06-08
    北京
  • 本文字数:910 字

    阅读完需:约 3 分钟

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
复制代码



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

3 分析问题

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


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



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

4 解决问题

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


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



会报错:



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


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



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


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



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,如果大家有别的办法欢迎评论!


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

发布于: 刚刚阅读数: 3
用户头像

不觉心动

关注

还未添加个人签名 2019-05-27 加入

还未添加个人简介

评论

发布
暂无评论
解决SpringBoot整合Mybatis和Mybatis-Plus不能公用(版本兼容性问题)_6月优质更文活动_不觉心动_InfoQ写作社区