报错如下


原因:当@MapperScan和@ComponentScan一起使用时,项目启动时扫描包会发生冲突,找不到swagger配置类的包和mapper接口的包

解决办法:@MapperScan和@ComponentScan可以一起使用。

改为@MapperScan(basePackages = {})的形式。

或者只使用@MapperScan()去扫描mapper包,让项目启动自己去扫描swagger配置类的包

课外拓展:

@MapperScan

1.首先了解@Mapper
在持久层的接口上添加@Mapper注解,编译后会生成相应的接口实现类,但由于要在每个接口上都进行配置,所以产生了@MapperScan。
2.@MapperScan
指定要编译成接口实现类的包路径,在编译完成后这个包下的所有接口都会生成相应的接口实现类。

@ComponentScan

1.会自动扫描包路径下的@Controller、@Service、@Repository、@Component类,符合扫描规则的类会装配到spring容器中。
2.@MapperScan和@ComponentScan可以同时使用
如果@MapperScan和@ComponentScan扫描的是同一路径会产生错误,所以
@MapperScan(basePackages = { "com" })
@SpringBootApplication

项目场景:

最近在使用SpringBoot搭建项目,使用了Mybatis的generator自动生成mapper和mapper.xml。在mapper注入的时候,发现自己对mapperscan、mapper、componentscan注解的理解不是很深入,因此,在这里记录一下。

问题描述:

SpringBoot项目启动后,发现mapper并没有注入到容器中。分析原因是在mapper类中少加了mapper注解,或者是主启动类中没有加mapperscan注解。其实归根结底还是因为对于这三个注解理解不深。


三种注解区别:

@ComponentScan注解

ComponentScan就是告诉Spring从哪里找到bean Spring会在应用主程序所在的包及其子包下进行全局扫描,把对应的bean注入到容器中,这里面的bean包括service mapper resposioty controller 所以在springboot程序中如果有mapper注解的话 就不用再加mapperscan注解,springboot注解自带componentscan,会扫描到。

@MapperScan注解

@Mapper注解可以在编译之后生产对应的接口实现类,如果要每个接口都编程实现类,需要在每个接口上加上Mapper注解,比较麻烦,解决这个问题用的是@MapperScan注解,mapperscan注解后面可以加value指定要扫描的包,即可实现mapper的注入。

其实MapperScan完成了两件事情:

根据配置的路径进行mapper.java的扫描 此处扫描到的就是mapper下的java文件为扫描到的mapper进行注册BeanDefinition。

@MapperScan和@ComponentScan使用问题相关推荐

  1. @MapperScan和@ComponentScan的区别

    首先,@ComponentScan是组件扫描注解,用来扫描@Controller  @Service  @Repository这类,主要就是定义扫描的路径从中找出标志了需要装配的类到Spring容器中 ...

  2. mybatis注解之@Mapper和@MapperScan的使用

    + 目录 mybatis注解之@Mapper和@MapperScan 方式一:使用@Mapper注解 方式二:使用@MapperScan注解 @MapperScan和@Mapper区别及理解 作用 扫 ...

  3. springboot Field userInfoInter in com.**.** required a bean of type ‘***.**‘

    问题: Field userInfoInter in com.yyjc.springboot.service.UserInfoService required a bean of type 'com. ...

  4. springboot 工程启动报错之Consider defining a bean of type ‘XXX’ in your configuration.

    一.前言: 使用springboot自动注入的方式搭建好了工程,结果启动的时候报错了!!!,错误如下图: Description:Field userEntityMapper in com.xxx.x ...

  5. 工作中使用到的单词(软件开发)_2022-02-26_备份

    ■原文 工作中使用到的单词(软件开发)_sun0322-CSDN博客 目录 ■常用链接 ■2020/03/15  (最初整理  242个单词) 2020 6/28 整理 2020 6/29 整理 20 ...

  6. 如何通过Java实现485通信

    1.整体架构的选择 首先根据需求,我这边使用的是springboot+netty的架构,使用了一个串口转网口的转换模块.为什么这么使用?部署的时候使用的是Linux的系统,在Linux下安装驱动比较麻 ...

  7. 工作中使用到的单词(软件开发)_2021-12-26_备份

    ■原文 工作中使用到的单词(软件开发)_sun0322-CSDN博客 目录 ■常用链接 2020 6/28 整理 2020 6/29 整理 2020 7/6 整理 ■2020/10/07 以降整理 ■ ...

  8. springboot--享学课堂

    1.springboot为什么启动类要在最外层 启动类注解@SpringBootApplication中包含了@ComponentScan,然后@ComponentScan的扫描原理是 扫描被注解类所 ...

  9. 工作中使用到的单词(软件开发)_2023_0316备份

    原文: 工作中使用到的单词(软件开发)_http://42.62.43.136:8081/_sun0322的博客-CSDN博客 目录 ■Java学习汇总 ■常用链接 ■2020/03/15  (最初整 ...

最新文章

  1. oracle数据库gold,Oracle技术之goldedgate初始化数据
  2. memcache分布式 [一致性hash算法] 的php实现
  3. docker linux redis 安装
  4. 反射就是获取该类的.class文件里面的方法,属性
  5. 【推荐系统】协同过滤 零基础到入门
  6. 优学院java架构52破解_[单选] 肢体根据需要采用气囊止血带上肢压力至()
  7. mysql中去重的用法_mysql中去重 distinct 用法
  8. sublime unable to save 没有那个文件或者目录
  9. MaxCompute 费用暴涨之新增SQL分区裁剪失败
  10. jdk卸载不干净怎么办_【实用】流氓软件卸载不干净?
  11. C++ Primer 第五版 第6章 6.3——函数返回类型和return语句习题答案
  12. struts2和hibernate(2012/2/26)
  13. iptables常用配置规则
  14. Android应用程序中的多个Activity的显示创建和调用
  15. bzoj 4082: [Wf2014]Surveillance 倍增
  16. 小米真蓝牙耳机说明书_【小米真无线蓝牙耳机Air 2评测使用说明书介绍】快充|降噪|蓝牙5.0|开盖即连|快捷操作_摘要频道_什么值得买...
  17. 人机关系:基于中国文化的机体哲学分析
  18. python图片表格提取算法_python提取图片内容并转换成对应表格的markdown代码
  19. wordpress漏洞工具_打击WordPress中的垃圾评论的12个重要提示和工具
  20. 【ASP.NET MVC系列】浅谈Google Chrome浏览器(操作篇)(上)

热门文章

  1. 给定重量上限,背包问题_满足给定重量的袋子的最低成本
  2. python两个中文队列比较_具有两个优先级的优先级队列Python
  3. python淘宝cookies抢购_Python实现淘宝秒杀聚划算抢购自动提醒源码
  4. linux字符设备驱动在哪里设置,从点一个灯开始学写Linux字符设备驱动!
  5. treeset java_Java TreeSet Higher()方法与示例
  6. Java GregorianCalendar setTimeZone()方法与示例
  7. 绝,Java 中创建对象的 5 种方法!
  8. 不错!SpringBoot发布Jar包优化瘦身指南!
  9. 读《财务自由之路》教会我的道理
  10. Net任意String格式转换为DateTime类型