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

本文讲述了在SpringBoot项目中遇到的MyBatis相关依赖问题,包括Mapper和Param注解报红、启动时找不到DAO接口的错误。作者尝试了升级和添加不同依赖的解决方案,最终发现将mybatis-spring-boot-starter版本升级到1.3.2解决了所有问题。分析指出,不兼容的依赖可能导致新问题,并强调了谨慎处理依赖关系的重要性。

一.问题

使用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分析依赖关联的包, 尝试更换这个依赖的版本。

在 Eclipse 中创建 Maven 项目并在 `pom.xml` 添加依赖的设置步骤如下: ### 创建 Maven 项目 在 Eclipse 里创建简单的 Java Maven 项目。可参考创建 Maven 项目的相关教程,过程涵盖下载、安装、Eclipse 配置等方面 [^1][^3]。 ### 配置 JRE 版本(可选) 自动创建的项目 JRE 版本默认为 1.5,若需更改,可在项目的 `pom.xml` 中添加如下代码将版本设置为 1.8: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5</version> <!-- 配置详细的信息 --> <configuration> <source>1.8</source> <target>1.8</target> <encoding>utf-8</encoding> </configuration> </plugin> </plugins> </build> ``` 此操作可依据需求选择是否进行 [^4]。 ### 添加依赖到 pom.xml 有两种添加依赖的方法: #### 方法 1:直接编辑 pom.xml 文件 直接编辑 `pom.xml` 文件添加依赖,不管是否在 Eclipse 中,这种方式都较为方便。从 Maven 仓库找到所需依赖的插件,将其中已写好的依赖配置代码直接拷贝到 Maven 项目的 `pom.xml` 文件对应位置即可 [^2]。 #### 方法 2:利用 Eclipse 的图形化引导功能 右键点击 Maven 项目,选择 `Maven` -> `Add Dependency`,填写要添加依赖的 `Group Id`、`Artifact Id`、`Version`,选择 `Scope`,然后点击右下角的 `OK` 按钮,之后 Maven 会自动下载依赖。若本地仓库中没有该依赖Maven 会从远端仓库下载到本地仓库 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值