No MyBatis mapper was found in ‘[com.yupi.apiinterface]‘ package. Please check your configuration.

首先介绍一下背景

新建了一个模块,然后按部就班的写了controll层

关键点来了

我用Mybatis-X的插件生成了实体类,mapper及注解还有service

但是mapper上面是没有@Mapper这个注解的

我前几天刚好分析了springboot的自动装配原理,我想着用

@ComponentScan("com.yupi.apiinterface.mapper")

这个注解来扫描mapper包,不过竟然报错了

No MyBatis mapper was found in '[com.yupi.apiinterface]' package. Please check your configuration.

最关键的是这项目启动没有问题:

 然后我刚好在模拟向后端发送请求这个功能

然后我发现,后端都收不到我的请求

后面我看了一下任务管理器:

8开头的端口没有我的项目进程

后面才回头去看了我的控制台发现了这个问题

解决问题:

后面去问了GPT:

在Spring Boot中,使用 MyBatis 时,@MapperScan 是推荐的做法,用于扫描 Mapper 接口并自动注册它们为 Spring Bean。虽然你可以使用 @ComponentScan 来扫描包含 Mapper 接口的包,但实际情况下,MyBatis 需要特定的注解(如 @Mapper)来正确地识别 Mapper 接口。

问题分析

  1. @ComponentScan:

    • @ComponentScan 可以扫描 Spring 管理的组件(包括带有 @Component@Service@Repository 和 @Controller 注解的类)。
    • 但是,MyBatis 的 Mapper 接口并不默认被识别,需要特定的处理。
  2. @Mapper:

    • 使用 @Mapper 注解标记的接口会被 MyBatis 识别为 Mapper接口,并能够生成实现类。
    • 当你在 Mapper 接口上添加 @Mapper 注解后,MyBatis 就能够找到并加载它们。

推荐解决办法:

  1. 使用 @MapperScan 注解:

    import org.mybatis.spring.annotation.MapperScan;  
    import org.springframework.boot.SpringApplication;  
    import org.springframework.boot.autoconfigure.SpringBootApplication;  
    
    @SpringBootApplication  
    @MapperScan("com.yupi.apiinterface.mapper") // 指定 Mapper 接口的包  
    public class Application {  
        public static void main(String[] args) {  
            SpringApplication.run(Application.class, args);  
        }  
    }  
  2. 如果想继续使用 @ComponentScan,那么请确保你的 Mapper 接口确实有 @Mapper 注解。

  3. 确保你的项目的依赖中包含了 MyBatis 和适用于你使用的数据库的 MyBatis Spring Boot Starter。

总结起来就是说@ComponentScan只能管理springboot的组件

像Service Repository和Controll,这种能被注册成Bean对象

如果你用了Mybatis的插件,就推荐用@MapperScan这个注

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值