一个maven依赖被成功添加但在项目中不起作用时, 修改依赖的版本>添加新的依赖

一.问题

使用IDEA在springboot项目的dao层用到 Mapper注解和Param注解, 报红.

按照这两个注解所属的包写出import语句,

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

ibatis报红。说明mybatis依赖出问题

<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>

这个依赖在我写dao层之前已经不报红了:此前用maven配置的aliyun镜像自动下载失败(报红),于是我找到官方仓库https://mvnrepository.com,手动下载并执行mvn install命令添加依赖到本地仓库

但是此时才发现

这里的版本1.3.0 竟然不支持导包 org.apache.ibatis

二. 解决了导包问题的同时, 又给项目带来新问题(看正解请跳过这里,直接看第三节)

没有改版本1.3.0, 而是添加新的依赖mybatis 3.4.6

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>
<!--mybatis 3.4.6 使Mapper和Param生效-->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.4.6</version>
</dependency>
<!--mybatis-spring 2.0.0 使MapperScan生效-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.0</version>
</dependency>

这样虽然解决了导包问题, 但是启动项目竟然报错 , 不能找到dao接口 (明明加了@Mapper注解):

A component required a bean of type ‘XXX’ that could not be found

为了解决这个报错, 我在启动类分别尝试加了 @MapperScan注解 和 @ComponentScan注解, 又带来新问题:

Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required

三.正解

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>

将版本 1.3.0 改为 1.3.2 可以导包 org.apache.ibatis 并且不会带来新的问题

四.分析

1.第二节的失败原因分析

我的项目下载的 mybatis-spring-boot-starter 1.3.0 不包含(或关联)其他的包,据此推测我单独引入的mybatis 和 mybatis-spring, 与 mybatis-spring-boot-starter 1.3.0并不兼容,导致了解决旧问题又出现新问题

在这里插入图片描述

2.第三节分析

mybatis-spring-boot-starter 1.3.2 包含(或者叫关联)了 mybatis 和 mybatis-spring 等

在这里插入图片描述

3.不同的mybatis-spring-boot-starter 1.3.0

这个项目源于 尚硅谷周阳老师的SpringCloud(H版&Alibaba)课程,

周老师课程项目源码地址 https://github.com/zzyybs/atguigu_spirngcloud2020

周老师的项目使用了mybatis-spring-boot-starter 1.3.0版本, 居然像我下载的1.3.2一样,包含了多个同样的包(只是其中部分包的版本有一点区别)
在这里插入图片描述
为什么我自己构建的项目下载mybatis-spring-boot-starter 1.3.0之后不包含任何包呢?

可能是因为我是手动从国外仓库https://mvnrepository.com下载的,

而打开周老师的项目时,这个依赖是自动下载的,但是我查看 https://maven.aliyun.com/mvn/search,还是没找到 mybatis-spring-boot-starter 1.3.0

4.总结

​ 当一个依赖被成功添加,却在项目中不起作用时,

​ 如果轻易添加新的依赖虽能解决当下问题,但难以保证两个依赖之间的兼容性和互补程度,可能会遇到接二连三的问题。

​ 此时应优先考虑:查看Dependency Analyzer分析依赖关联的包, 尝试更换这个依赖的版本。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值