搭建spring boot+mybatis(plus)踩坑记录(二):找不到方法getLanguageDriver

10 篇文章 0 订阅

这两天由于工作上需要,和同事一起搞一个项目,项目很简单,只对一张表维护,数据来源于硬件设备,通过Socket传输。我主要负责设计和项目搭建,之前也搭过,是mybatis的,mybatis-plus的项目是用别人搭好的,自己没实践过,现在必须得弄了。两天的搭建过程中主要遇到三个问题,有一些新的思考,做个记录, 方便后面回顾学习,也希望能帮到同为工程师的我们。这是第二篇。

问题:项目启动不了,说找不到getLanguageDriver

语言:java

框架:Spring boot + maven + Mybatis plus

pom关键依赖:groupId com.baomidou,artifactId mybatis-plus,version 3.4.0、mybatis-spring-boot-starter 2.0.0

项目启动报错,找不到getLanguageDriver,提示org.apache.ibatis.session包中的Configuration类没有getLanguageDriver方法,试图调用MybatisMapperAnnotationBuilder类的getLanguageDriver,说getLanguageDriver这个方法在mybatis-3.5.0的Configuration中才有 :

当时看到这个报错,我感觉是引用包冲突,应该从这方面入手,不过也稍微有点心态崩了,主要是前面已经浪费了一些时间,项目上时间也有点一点点紧,现在又出现在新的问题,我也不知道还会有其它的问题等着我,一开始是在网上找了下,几分钟后没解决问题,我感觉还是要静下心来,找到问题本质,而不是莽莽撞撞,问题也没那么难,这应该就是项目冲突了呀,然后想着idea上应该可以查看项目依赖,之前也一直没用过,也是有点惭愧了:

后侧Sidebar找到maven,点开,再点Show Dependencies,强烈推荐,这里的功能是真的很多,真的有帮助,可以帮助自己理解依赖关系,相互引用。遇到编译时奇怪的class或者方法找不到,这种方式排查可以帮到你。

项目的依赖图还是比较直观清晰的,我这边项目还不大,引用的不多,虽然看着比较复杂,但都是有头有尾,往下拉后发现有红色虚线的:

红色的虚线就表示jar包冲突了噢,上图中可以看到mybatis-spring-boot-starter中的mybatis和mybatis-plus下mybatis-plus-extension下的mybatis-plus-code下的mybatis冲突,mybaits-plus下的mybatis- plus-extension下的mybatis-spring和 mybatis-plus下的mybatis-spring冲突,两边冲突的版本号也写得和清楚:

按Alt键还有放大功能:

双击一个包,会定位到具体的pom文件,这样也可以验证冲突两边的信心,比如版本号:

通过依赖图可以看到,其实mybatis-plus中其实已经包含了mybatis:mybatis-plus下的mybatis-plus-extension下的mybatis-plus-code下的mybatis 是3.5.5,想到既然是这样,那应该只需要引用mybatis-plus就可以了吧,之前的mybatis是spring-boot-start下的,那mybatis-plus应该也有boot-start下的吧,于是在maven仓库上搜了下,发现是有的,第2个:

又因为要动态表名,mybatis-plus要3.4.0,所以用了3.4.0:

在第一篇中说到这个问题,再补充个小插入,在用mybatis-plus-boot-starter之前,是把mybatis-plus从3.4.0降到3.1.0,当时也意识到是版本冲突,试了下降低版本,看了下另一个项目那边引用mybatis-plus是3.1.0,改完后服务t也可以启动,但是还是要单独配置SqlSessionFactory,想到另一个项目也不需要呀,估计还是要改引用,于是采用mybatis-plus-boot-starter,因为mybatis-plus已内置mybatis,想想也是啊,mybatis-plus是对mybatis的增强,那它肯定要引用mybatis。另外redis也是boot-start的,更坚定了这个想法:

用了mybatis-plus-boot-starter后,SqlSessionFactory的配置也不需要了,服务可以启动,可以使用baseMapper的查询:

找到问题:引用包冲突。

心得:

1.一个版本的包与一个版本的包可能存在差异,比如mybatis-plus 3.4.0和3.4.1存在上面说的getLanguageDriver方法的差异,mybatis-plus和mybatis-plus-boot-starter和mybatis-plus存在SqlSessionFactory不同的内部实现,也是啊,版本迭代,有些东西在变化,别人说的也是他实际使用的,遇到的,于是所有这些都可以理解了。

2.不要盲目拷贝粘贴,还是要有自己的思考呀,遇到问题要沉着冷静,配合工具的适当使用排查问题。要不然只是CV工程师,这对自己几乎没有什么帮助。

3.还是不要抱有侥幸心理,这次遇到问题没搞清楚,就算误打误撞解决了,下次也一定会是问题,其实有些时候花点时间从本质上解决问题或者学会一个工具,虽然这一次花了点时间,后面都是帮自己省事,要慢慢尝试克服内心的懒惰,畏惧心理,才能慢慢进步。

  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值