mybatis jar包_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;

完整的异常信息如下图

4fbfa423cc8567dcd4ad6c0eb65ba0f6.png

排查思路

从打印的异常信息,我们知道是不存在getLanguageDriver()这个方法。跟进源码会发现

ed33830bf68d5756fa55eabe08aca6bd.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

0d67ccf8bc4100dd371f602e0017e64c.png


很遗憾事情不是我们想的那样,MybatisConfiguration只有一个

2、项目中存在多个Configuration?

按住快捷键Ctrl+Shift+R

753b2cf5a6fb8378db2137d0d1d9e99a.png


果然存在2个Configuration。

3、验证包冲突

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

22282471ba42cb7b05c99f88d5d04ad6.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依赖冲突以及解决方法​mp.weixin.qq.com
ab403d56048310f155b7703c6f12ea68.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java_二进制的前导的零

题目内容: 计算机内部用二进制来表达所有的值。一个十进制的数字,比如18,在一个32位的计算机内部被表达为00000000000000000000000000011000。可以看到,从左边数过来,在第一个1之前,有27个0。我们把这些0称…

共享几套silverlight2 toolkit最新的皮肤控件样式下载

下载了最新的silverlight2 toolkit看看,发现里面的控件样式还是多漂亮的,与大家分享下。 blue dark light orange purple red 样式源码下载:点击下载 当然,我最喜欢的还是orange哦。 转载于:https://www.cnblogs.com/liaohenchen/…

python爬取同花顺_Java爬取同花顺股票数据(附源码)

最近有小伙伴问我能不能抓取同花顺的数据,最近股票行情还不错,想把数据抓下来自己分析分析。我大A股,大家都知道的,一个概念火了,相应的股票就都大涨。 如果能及时获取股票涨跌信息,那就能在刚开始火起来的…

开会=浪费时间?阿里技术团队这样开项目复盘会

2019独角兽企业重金招聘Python工程师标准>>> 阿里妹导读:复盘是项目结束后必不可少的阶段,好的复盘会议能够有效地促进团队成长。今天,阿里项目管理专家鹿迦以自身的经验,为大家分享如何做好一个项目的复盘。这篇文章分…

Spring @Value注解无法正确赋值问题

正确的调用方式为: Component public class IconProperties {Value("${icon.url}")private String url; } public class test{AutowiredIconProperties icon;public void test(){ String url icon.url; } } 这里有三个需要注意的点: 1.Value…

Extjs中使用FusionChart举例

一 前言: 在项目实施中,设计统计部分经常会使用图表进行显示,在Extjs3中内置了图表控件,但实际表现无法达到3D的美观效果,通过查找FusionChart可以实现比较美观的3D或2D图表显示。注:FusionChart是个商业…

drawitem设置指定行的背景颜色_Java 为 Excel 中的行设置交替背景色

点击上方 好好学java ,选择 星标 公众号重磅资讯、干货,第一时间送达今日推荐:牛人 20000 字的 Spring Cloud 总结,太硬核了~作者:Jazzz链接:https://www.cnblogs.com/jazz-z/p/12665819.html在制作Excel表…

常见的关系型数据库和非关系型数据及其区别

一、关系型数据库 关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 优点:1、易于维护:都是使用表结构,格式一致;2、使用方便:SQL语言通用,可用于复杂查询&#x…

逆序数技巧 - 牛客

链接:https://ac.nowcoder.com/acm/contest/308/D来源:牛客网 题目描述 tokitsukaze给你一个长度为n的序列,这个序列是1到n的一种排列。然后她会进行q次操作。每次操作会给你L R k这三个数,表示区间[L,R]往右移动k次。移动一次的…

Ajax跨域提交JSON和JSONP

可以直接使用$.getJSON()方法实现跨域请求,参数中必须加上callback,如: var jsonpUrl http://www.test.com/index.php?cApi_Order&aAddOrder&callback?;var param {uid:uid,type:type,cityId:cityId};$.getJSON(jsonpUrl, param,…

mysql数据库商业版与社区版的区别

1、商业版本组织管理与测试环节控制更严格,稳定性方面,会比社区版本更稳定。 2、mysql是成熟产品,商业版与社区版之间性能方面相差不大。 3、商业版不遵守GPL协议,社区版遵守GPL协议可以免费使用。 4、使用商业版后可以购买相关的…

UML的奥妙 - 学习UML笔记(1)

前两天买了一本《大象 Thinking in UML》,其实本就有学习UML的念头,但都因这样那样的事儿耽搁了,当然,也有些惰性在作祟...... 闲话少说,这本书看完了一章,发现还是不错的,先把这两天的学习情况…

无法检查指定的位置是否位于cfs上_(干货分享)一文搞明白 节气门位置传感器的作用、故障类型与症状、诊断方法...

1 位置节气门位置传感器(ThrottlePositionSensor,TPS),位于节气门体上,其安装形式因节气门结构的不同而有所差异:对于传统的机械拉索式节气门,节气门位置传感器通常以一个独立元件的形式安装在节气门体的侧面&#xf…

盒子模型

1 <!doctype html>2 <html>3 <head>4 <title>盒子模型</title>5 <meta charset"utf-8">6 <meta name"keywords", content"">7 <meta name"description&…

表单跨域提交

利用form表单跨域post 现在ajax应用这么广泛&#xff0c;一般的应用都是直接通过异步调用就可以了&#xff0c;但是有些东西必须要使用post&#xff0c;而且是跨域的时候&#xff0c;ajax异步调用的方式就无能为力了。当然现在也有很多种办法&#xff0c;比如通过flash中转去po…

Asp.net(C#)-显示所有缓存 清除所有缓存

//清除所有缓存protectedvoidRemoveAllCache() { System.Web.Caching.Cache _cache HttpRuntime.Cache; IDictionaryEnumerator CacheEnum _cache.GetEnumerator(); ArrayList al new ArrayList(); while (CacheEnum.MoveNext()) { …

mysql数据库三大引擎优缺点

1.MyISAM 特性&#xff1a; ①不支持事务。 ②表级锁定&#xff0c;并发性能大大降低。 ③读写互相阻塞。 适用场景&#xff1a; ①不支持事务。 ②并发相对较低&#xff0c;表锁定。 ③执行大量select语句操作的表。 ④count(*)操作较快。 ⑤不支持外键。 注&#xff1a;查询速…

Python--day60--一个简单(不完整)的web框架

转载于:https://www.cnblogs.com/xudj/p/10091775.html

activemq 发两条只收到一条_浅谈ActiveMQ与使用

更多大数据架构、实战经验&#xff0c;欢迎关注【大数据每日哔哔】&#xff0c;期待与你一起成长&#xff01;本文将介绍一下 ActiveMQ 的安装、原理和简单实战。一、什么是消息中间件消息中间件顾名思义实现的就是在两个系统或两个客户端之间进行消息传送二、什么是ActiveMQAc…

php发送get、post请求的几种方法

方法1: 用file_get_contents 以get方式获取内容 <?php $urlhttp://www.domain.com/; $html file_get_contents($url); echo $html; ?>方法2: 用fopen打开url, 以get方式获取内容<?php $fp fopen($url, r); stream_get_meta_data($fp); while(!feof($fp)) { $res…