欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 springboot2整合mybatis-plus3踩到的坑

程序员文章站 2022-03-03 12:06:18
前言最近在进行项目重构,在架构师的建议下,就把项目中mybatis切换成mybatis-plus。因为mybatis-plus在 mybatis 的基础上只做增强不做改变,因此切换的成本很低,就只需改jar和配置内容,原先的代码无需改动。因为mybatis-plus对mybatis的友好支持,我们花了一点时间就把mybatis改成mybatis-plus,那改造成不成功,先启动一下看不就知道了。然而一启动就翻车了,报了如下的错误 com.baomidou.mybatisplus.core.Mybati...

前言

最近在进行项目重构,在架构师的建议下,就把项目中mybatis切换成mybatis-plus。因为mybatis-plus在mybatis的基础上只做增强不做改变,因此切换的成本很低,就只需改jar和配置内容,原先的代码无需改动。

因为mybatis-plus对mybatis的友好支持,我们花了一点时间就把mybatis改成mybatis-plus,那改造成不成功,先启动一下看不就知道了。然而一启动就翻车了,报了如下的错误

 com.baomidou.mybatisplus.core.MybatisConfiguration.getLanguageDriver(Ljava/lang/Class;)Lorg/apache/ibatis/scripting/LanguageDriver;

完整的异常信息如下图
荐
                                                        springboot2整合mybatis-plus3踩到的坑

排查思路

从打印的异常信息,我们知道是不存在getLanguageDriver()这个方法。跟进源码会发现
荐
                                                        springboot2整合mybatis-plus3踩到的坑
getLanguageDriver这个方法可能是由

com.baomidou.mybatisplus.core.MybatisConfiguration

或者MybatisConfiguration的父类

org.apache.ibatis.session.Configuration

提供。由异常信息我们可以猜测如果项目要启动成功,就需要getLanguageDriver这个方法,而项目目前引用的MybatisConfiguration及其Configuration都无力提供,由此我们可以推断我们项目引入冒牌的MybatisConfiguration或者Configuration。更进一步的推断我们项目中应该存在多个
MybatisConfiguration或者Configuration。用人话来说,就是我们项目存在类冲突,更直白点就是jar冲突

验证过程

1、项目中存在多个MybatisConfiguration?

按住快捷键Ctrl+Shift+R
荐
                                                        springboot2整合mybatis-plus3踩到的坑
很遗憾事情不是我们想的那样,MybatisConfiguration只有一个

2、项目中存在多个Configuration?

按住快捷键Ctrl+Shift+R

荐
                                                        springboot2整合mybatis-plus3踩到的坑
果然存在2个Configuration。

3、验证包冲突

利用maven-helper插件查看jar冲突

荐
                                                        springboot2整合mybatis-plus3踩到的坑
很明显存在mybatis包冲突,而且我们项目引入的3.4.4版本的mybatis,而mybatis-plus需要引入的是3.5.3版本的mybatis

解决思路

借助maven-helper插件,我们可以看出项目是因为包传递依赖间接引入3.4.4版本的mybatis。因此我们把有引用3.4.4版本mybatis的项目升级成引入mybatis 3.5.3版本就行

总结

本文出现的坑挺常见的,利用搜索引擎应该都可以找到答案。写这篇文章除了介绍如何解决这个坑,主要还是想介绍一种排查问题的思路,即假设验证法。因为并不是每次都可以从搜索引擎上找到答案,此时我们就可以根据已知信息去一步步论证推断。最后如果对maven冲突解决感兴趣的朋友,可以查看下我之前写的文章
maven依赖冲突以及解决方法

本文地址:https://blog.csdn.net/kingwinstar/article/details/107320649

相关标签: java