springboot2整合mybatis

Easter79
• 阅读 453

前言

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

排查思路

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

2、项目中存在多个Configuration?

按住快捷键Ctrl+Shift+R

springboot2整合mybatis
果然存在2个Configuration。

3、验证包冲突

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

springboot2整合mybatis
很明显存在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
kenx kenx
2年前
SpringBoot2.4.x整合Mybatis-Plus3.4.x(详细教程)
Mybatis和MybatisPlus的区别与联系MybatisPlus是一个Mybatis的增强工具,只是在Mybatis的基础上做了增强却不做改变,MyBatisPlus支持所有Mybatis原生的特性,所以引入MybatisPlus不会对现有的Mybatis构架产生任何影。MybatisPlus又简称(MP)是为简化开发,提高开发效率而生正如官网所说
Easter79 Easter79
2年前
springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatis
springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatisplus无法正常使用问题参考文章:(1)springboot集成swagger2多模块中文配置详细步骤,解决集成mybatis或mybatisplus无法正常使用问题(https://www.oschina.net/action/Go
Easter79 Easter79
2年前
springboot项目mybatisplus的快速使用
一、MyBatisPlus介绍 转自mybatisplus官网下方附有mybatisplus官方网站!(https://oscimg.oschina.net/oscnet/da1f3c9b055919a762fbaa48628c9274833.jpg)MyBatisPlus(简称MP)是一个 MyBatis 的增强工具,在MyBat
Easter79 Easter79
2年前
springboot代码自动生成
在项目开始阶段经常需要自动生成一批代码,如果使用了mybatis则可以使用mybatisplus就可以生成mybatis相关代码。不过经常项目中还有一些mvc代码需要生成,比如说前端代码、相关sql、swagger注解、权限注解等等。下面提供一个代码生成demospringboot集成vm自动生成前端代码、controller、service、myba
Stella981 Stella981
2年前
MyBatis基于Maven的入门
主要内容如下: 1.myBatis在maven中的配置 2.myBatis在工程中的config配置文件3.myBatis为Bean和表的映射文件4.myBatis基本的使用 myBatis在maven中的配置,在pom.xml中增加内容       1.增加依赖 ,mybatis的,还有mysql的驱动的
Stella981 Stella981
2年前
SpringBoot集成Mybatis动态多数据源后,MybatisPlus的IPage失效的问题解决方案
SpringBoot集成Mybatis动态多数据源后,MybatisPlus的IPage失效的问题解决方案参考文章:(1)SpringBoot集成Mybatis动态多数据源后,MybatisPlus的IPage失效的问题解决方案(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F
Stella981 Stella981
2年前
MybatisPlus知识详解以及用十数个例子完成MybatisPlus的入门到进阶
1\.MybatisPlus1.1业务需求Mybatis缺点:1.Mybatis操作数据库的过程中,需要编辑大量的sql语句.无论该sql是否复杂或者简单.2.Mybatis操作时在xml配置文件中需要额外记忆单独的标签.需求:能否实现单表操作的CRUD的全自动的实现.能否实现
Stella981 Stella981
2年前
Spring Boot + Mybatis
前言:MybatisPlus(简称MP)是一个Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发、提高效率而生。简单来说,MybatisPlus是Mybatis的增强工具包,其简化了CRUD操作,提供了代码生成器,强大的条件构造器。同时内置了多个实用插件:标配的分页插件、性能
Stella981 Stella981
2年前
Hibernate与Mybatis的区别
  最近在准备面试,在复习Hibernate和Mybatis。Hibernate和Mybatis在日常的开发中,都有使用到过。现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加得心应手。 1、开发速度的对比    从开发速度来说,Hibernate的真正掌握要比Mybatis难一些。Mybat
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k