springboot2整合mybatis

前言

最近在进行项目重构,在架构师的建议下,就把项目中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;

完整的异常信息如下图
启动报错.png

排查思路

从打印的异常信息,我们知道是不存在getLanguageDriver()这个方法。跟进源码会发现
方法找不到.png
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
MybatisConfiguration冲突.png
很遗憾事情不是我们想的那样,MybatisConfiguration只有一个

2、项目中存在多个Configuration?

按住快捷键Ctrl+Shift+R

Configuration冲突.png
果然存在2个Configuration。

3、验证包冲突

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

冲突.png
很明显存在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依赖冲突以及解决方法

点赞
收藏

评论区

加载中...

相关推荐

MyBatis-Plus

一、MyBatisPlus本文转自https://www.cnblogs.com/lyh/p/12859477.html,如有侵权,请联系删除。1、简介  MyBatisPlus是一个Mybatis增强版工具,在MyBatis上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在。官网文档地址:  https://mp.baomid

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis

springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatisplus无法正常使用问题参考文章:(1)springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatisplus无法正常使用问题(https://www.oschina.net/action/Go

springboot项目mybatisplus的快速使用

一、MyBatisPlus介绍 转自mybatisplus官网下方附有mybatisplus官方网站!(https://oscimg.oschina.net/oscnet/da1f3c9b055919a762fbaa48628c9274833.jpg)MyBatisPlus(简称MP)是一个 MyBatis 的增强工具,在MyBat

springboot代码自动生成

在项目开始阶段经常需要自动生成一批代码,如果使用了mybatis则可以使用mybatisplus就可以生成mybatis相关代码。不过经常项目中还有一些mvc代码需要生成,比如说前端代码、相关sql、swagger注解、权限注解等等。下面提供一个代码生成demospringboot集成vm自动生成前端代码、controller、service、myba

SpringBoot2.4.x整合Mybatis-Plus3.4.x(详细教程)

Mybatis和MybatisPlus的区别与联系MybatisPlus是一个Mybatis的增强工具,只是在Mybatis的基础上做了增强却不做改变,MyBatisPlus支持所有Mybatis原生的特性,所以引入MybatisPlus不会对现有的Mybatis构架产生任何影。MybatisPlus又简称(MP)是为简化开发,提高开发效率而生正如官网所说