转载

springboot2整合mybatis-plus3踩到的坑

前言

最近在进行项目重构,在架构师的建议下,就把项目中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://segmentfault.com/a/1190000023222550
正文到此结束
Loading...