• 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;
    

    完整的异常信息如下图
    启动报错.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依赖冲突以及解决方法

  • 相关阅读:
    LeetCode(258):Add Digits
    LeetCode(7):Reverse Integer
    LeetCode(14):Longest Common Prefix
    LeetCode(58):Length of Last Word
    LeetCode(165): Compare Version Numbers
    LeetCode(20):Valid Parentheses
    LeetCode(125):Valid Palindrome
    Scala中Curring实战详解之Scala学习笔记-16
    Scala中SAM转换实战详解之Scala学习笔记-15
    Scala学习笔记-14
  • 原文地址:https://www.cnblogs.com/linyb-geek/p/13299030.html
Copyright © 2020-2023  润新知