使用 @Mapper 注解后是否还需要 @MapperScan 注解吗?

SpringBoot - @Mapper与@MapperScan注解的作用是什么? 在SpringBoot的项目中,集成Mybatis持久层框架后,对于Mybatis的接口类如:UserMapper,SysMenuMapper,这些接口类*Mapper用于访问持久层,在JPA中指的是DAO层。在Service层需要使用@Autowired或@Resource注解注入后调用*Mapper里的方法时,需要将这些接口注入到Spring上下文中 阅读详情

这是一个非常关键且常见的问题。答案是:

如果每个 Mapper 接口上都显式添加了 @Mapper 注解,那么通常不再需要 @MapperScan。

但是否“完全不需要”,还需结合项目实际情况来判断。下面详细说明:


✅ 一、两种方式的作用

方式说明
@Mapper(接口上)标记单个接口为 MyBatis Mapper,Spring 会将其注册为 Bean
@MapperScan(启动类上)批量扫描指定包下的所有接口,自动注册为 Mapper Bean,无需每个接口加 @Mapper

✅ 二、使用 @Mapper 后是否还需要 @MapperScan?

✅ 情况 1:所有 Mapper 接口都加了 @Mapper
  • 不需要 @MapperScan
  • Spring 在组件扫描时会自动识别带 @Mapper 的接口并注册
  • ✅ 推荐做法:清晰、显式、便于 IDE 理解(如跳转、重构)
⚠️ 情况 2:部分接口加了 @Mapper,部分没加
  • 没加 @Mapper 的接口不会被注册 → 启动报错(Invalid bound statement)
  • 此时若想统一管理,建议统一使用 @MapperScan 并移除所有 @Mapper
❌ 情况 3:既加了 @Mapper,又配置了 @MapperScan
  • 不会冲突,MyBatis-Spring 会去重处理
  • 但属于冗余配置,不推荐(增加理解成本)

✅ 三、最佳实践建议(企业级项目)

场景推荐方案
小型项目 / 快速开发使用 @MapperScan(简洁,少写注解)
中大型项目 / 团队协作 / 代码可读性优先每个 Mapper 接口显式加 @Mapper,不使用 @MapperScan
混合遗留项目统一风格,避免混用

📌 主流趋势:越来越多团队倾向于 显式标注 @Mapper,理由如下:

  • 代码自解释性强(看到接口就知道是 Mapper)
  • IDE 支持更好(如 Spring 插件能识别 Bean)
  • 避免因 @MapperScan 包路径错误导致“部分 Mapper 未加载”的隐蔽问题
  • 符合“显式优于隐式”(Explicit is better than implicit)的工程哲学

✅ 四、示例对比

方案 A:使用 @Mapper(推荐)
// UserMapper.java
@Mapper
public interface UserMapper extends BaseMapper<User> { }
// 启动类
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
// ✅ 无需 @MapperScan
方案 B:使用 @MapperScan
// UserMapper.java(无注解)
public interface UserMapper extends BaseMapper<User> { }
// 启动类
@SpringBootApplication
@MapperScan("com.example.demo.mapper") // 扫描包
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

✅ 五、常见误区澄清

误区正确理解
“必须用 @MapperScan 才能用 MyBatis”❌ 错!@Mapper 单独即可
“用了 @Mapper 还要配 @MapperScan 才保险”❌ 冗余,无必要
“XML 文件必须配合 @MapperScan”❌ XML 与注解方式无关,只与 Mapper 接口是否被注册有关

✅ 总结

如果你在 mapper.java.ftl 模板中已经为每个 Mapper 接口添加了 @Mapper 注解,那么你的 Spring Boot 启动类中就不再需要 @MapperScan。

这是标准、安全、可维护的做法,尤其适合通过代码生成器批量生成 Mapper 的场景。

✅ 最终建议:

  • 模板中保留 @Mapper
  • 启动类不要加 @MapperScan
  • 保持风格统一,避免混用
SpringBoot 集成Mybatis中@Mapper与@MapperScan注解的区别 在使用`SpringBoot`整合`Mybatis`持久层框架时,对于`Mybatis`生成的接口类,例如 `UserMapper`,这些接口类 `*Mapper`在这里充当了`Dao`层的角色,,在Service层编写业务代码的时候需要使用@autowired或@resource注解注入然后调用mapper里面的方法;因此需要将这些mapper类都标注为`Be 阅读详情

相关推荐

QT日志输出终极指南:从qDebug到qFatal的完整文件记录方案

本文深入探讨了QT日志系统的企业级文件记录方案,从基础的qDebug、qWarning、qCritical、qFatal等宏的使用,到构建自定义消息处理器、实现异步写入、分级存储、日志轮转及性能监控等高级功能。旨在帮助开发者构建一个稳定、高效且易于维护的专业级日志管理架构,适用于桌面应用、嵌入式系统及服务端程序。

ik678901234的博客 909

7、注解@Mapper、@MapperScan

1、@Mapper注解: 作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类 添加位置:接口类上面 @Mapper public interface UserDAO { //代码 } 如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan 2、@MapperScan 作用:指定要变成实现类的接口所在的...

nba_linshuhao的博客 4万+

Unity Shader Graph 2D - Procedural程序化图形转动的环状六边形

Hexagon又称六边形,在游戏中是十分常见的基础形状,本文将使用程序化的六边形来制作多个环状六边形叠加的转动动画效果,实践Unity Shader Graph中的常用节点功能。

Giver的博客 1928

mybatis注解之@Mapper和@MapperScan

在使用Mybatis持久层框架来操作数据库时,我们可以使用@Mapper注解和@MapperScan注解来将Mapper接口类交给Sprinig进行管理。 方式一:使用@Mapper注解 优点:粒度更细 缺点:直接在Mapper接口类中加@Mapper注解,需要在每一个mapper接口类中都需要添加@Mapper注解,较为繁琐 方式二:使用@MapperScan注解 通过@...

codeMagic崔的博客 4062

arcgis建筑数据的矢量化(一)

简单来说,建筑数据的获取无外乎是矢量化和去网站下载 无奈的是,osm和网上的建筑数据只有全国的主要城市,实在是为难我们这些小城市的,百度和天地图上是有建筑数据,无奈人家不要开放下载啊,所以就只能矢量化咯, 矢量化,无外乎手动和自动,手动就是新建shp面手动勾绘,这里就不讲了,我们来看看自动矢量化 自动矢量化在arcgis中主要是利用arcscan和栅格转面(栅格转面这个效果真是一言难尽,所以我们主要讨论arcscan) 同时我们矢量化也不一定要局限于arcgis...

Jasenjane的博客 3925

华为服务器RAID配置避坑指南:如何通过iBMC快速识别阵列卡型号并完成初始化

本文详细解析华为服务器RAID配置全流程,重点介绍通过iBMC快速识别阵列卡型号、硬盘健康诊断及RAID级别选择的场景化策略。提供从iBMC登录到缓存策略调优的实战技巧,帮助工程师避免常见配置陷阱,提升服务器存储系统性能和稳定性。

weixin_28475533的博客 490

@Mapper 与 @MapperScan 的区别

文章目录1、@Mapper注解2、@MapperScan2.1、@MapperScan 扫描多个包2.2、 @MapperScan 使用表达式,来扫描的包和其子包下面的类3、总结: 1、@Mapper注解 作用:用在接口类上,在编译之后会生成相应的接口实现类 位置:对应的某个接口类上面 @Mapper public interface EmployeeMapper { public Em...

猎人在吃肉 2万+

【SerDes】美信GMSL2-CSI调试心得

美信GMSL2加解串器芯片家族广泛应用于车载和工业视觉系统。文章介绍了MAX96717/MAX96717F加串器和MAX96724/MAX96724R解串器的关键特性,包括支持MIPI CSI-2接口、6Gbps传输速率等功能。提供了基于高通平台的demo系统配置和调试步骤,重点阐述了Link Lock、PCLK检测和Video Lock等关键调试环节,并详细说明了像素模式,隧道模式的工作原理及寄存器配置示例。文中还包含通过I2C读写寄存器的具体操作指令,取流freeze可能原因和解决方法。

qq_38089448的博客 2479

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

在使用Mybatis持久层框架来操作数据库时,我们可以使用@Mapper注解和@MapperScan注解来将Mapper接口类交给Sprinig进行管理。优点:粒度更细缺点:直接在Mapper接口类中加@Mapper注解,需要在每一个mapper接口类中都需要添加@Mapper注解,较为繁琐通过@MapperScan可以指定要扫描的Mapper接口类的包路径在路径中可以使用 * 作为通配符对包名进行匹配​ 也可以使用@MapperScan注解对多个包进行扫描。

m0_73687324的博客 4305

《UDS协议从入门到精通》系列——图解0x10:诊断会话控制

什么是诊断会话控制服务?切换模式时ECU要做哪些?有没有通信示例?本文全网最详解!!

车载系统攻城狮 1万+

Win11此电脑怎么放在桌面上?Win11此电脑如何显示在电脑桌面上?

相信用习惯Win10的用户都喜欢电脑电脑桌面上的此电脑,但是很多用户更新完Win11正式版以后,发现桌面只有回收站和Microsoft Edge图标,没有此电脑。那么,Win11此电脑要如何显示呢?下面小编为大家简单介绍一下操作方法!5、桌面图标设置窗口,点击勾选计算机,然后点击确定,桌面就可以显示此电脑图标了。1、桌面空白处,点击右键,在打开的菜单项中,选择显示设置;4、个性化 - 主题,相关设置下,点击桌面图标设置;3、右侧点击主题(安装、创建、管理);2、设置窗口,左侧点击个性化;

shengyin714959的博客 13万+

Springboot项目问题记录

注解 1、mybatis.mapper-locations在SpringBoot配置文件中使用,作用是扫描Mapper接口对应的XML文件,如果全程使用@Mapper注解,可以不使用该配置。 2、@MapperScan会扫描Mapper接口类,并生成对应的实现类。 注意: 如果Mapper.xml文件和Dao接口在同一级包下,则 mapper.locations不需要在application.yml中配置。其次,@MapperScan是替代@Mapper的便捷写法,二者可以相互替换。 案例: 前提:mapp

mingrizhixin的博客 1261

20、七鳃鳗繁殖与早期生活史:从水质到养殖的全面解析

本文全面解析了七鳃鳗的繁殖与早期生活史,重点探讨了水质对幼体生存的影响、养殖密度与生长关系、变态过程的时间与大小特征,以及人工繁殖在濒危物种恢复和入侵物种控制中的应用。同时,文章分析了大规模养殖面临的挖掘基质需求、空间限制、清洁管理、疾病防控及微生物环境等挑战,并强调实验室养殖对科学研究和种群管理的重要意义。随着技术进步,未来有望扩展更多物种的繁殖研究,揭示七鳃鳗生物学的进化奥秘,实现资源的可持续利用。

l6m7n8的博客 115

【注解】Mapper的注解 @Mapper、@Repository、@MapperScan

Mapper是 Mybatis 的注解,和 Spring 没有关系,是 Spring 的注解,用于声明一个 Bean。是Spring Boot 提供的注解,用于指定要扫描的Mapper接口包路径,并将这些接口自动注册为Spring Bean。

代码的魅力,根本走不出来 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

@Mapper注解和@MapperScan注解的使用

一、@Mapper注解的使用 1.1 @Mapper注解的的作用 为了把mapper这个DAO交給Spring管理( http://412887952-qq-com.iteye.com/blog/2392672); 为了不再写mapper映射文件(https://blog.youkuaiyun.com/weixin_39666581/article/details/103899495); 自动为添加@Mapper注解的接口生成一个实现类(http://www.tianshouzhi.com/api/tutorial

qq_45793102的博客 9339

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

@Mapper、@MapperScan注解

首先,我们要使用@Mapper和@MapperScan注解的话,我们首先需要在对应的项目里面导入相关的依赖或者jar包。 <!--myabtis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-s...

weixin_44185837的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

详解 @MapperScan 注解和 @Mapper 注解

详解 @MapperScan 注解和 @Mapper 注解

qq_42320804的博客 7660

注解 @Mapper @MapperScan

1. @Mapper注解: 作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类 添加位置:接口类上面: @Mapper public interface UserDAO { //代码 } 如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan 2、@MapperScan: 作用:指定要变成实现类的接口...

mulinsen77的博客 4187

注解@Mapper、@MapperScan

1、@Mapper注解: 作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类 添加位置:接口类上面 @Mapper public interface UserDAO { //代码 } 如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan 2、@MapperScan 作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类 添加位置:是在Spring...

诚的博客 618

@Mapper与@MapperScan注解

作用在dao(mapper)层上的一个注解,将接口生成一个动态代理类,有了这个注解就不用再写Mapper.xml文件如果缺少这个注解,运行项目就会报相应的错误。

m0_67930426的博客 370

springBoot 中关于dao层的三个注解 @Repository @Mapper @MapperScan @Component 的区别和理解

原文链接:https://blog.youkuaiyun.com/u013158317/article/details/104006164 我提取的精华: 总结 @Mapper 一定要有,否则 Mybatis 找不到 mapper。 @Repository 可有可无,可以消去依赖注入的报错信息。 @MapperScan 可以替代 @Mapper。 1、@Mapper @Mapper 是 Mybatis 的注解,和 Spring 没有关系,@Repository 是 Spring 的注解,用于声明一个 Bean。 在 S

优快云_RLZ的博客 1万+

@Mapper注解和@MapperScan注解的关联性,以及源码分析

@Mapper注解和@MapperScan注解的关联性,以及源码分析。 @Mapper注解和@MapperScan注解是我们使用mybatis-spring的常用注解,之前为了探究两个注解的关联性,百度了一波的文章,都将@Mapper注解和@MapperScan注解分开讲解。索性自己结合mybatis-spring和spring-boot源码分析,探究两个注解的关联性。 一、启动类定义MapperScan注解的方式 1,这两个注解的入口得从@MapperScan注解来说 从@MapperScan注解

qq_38663602的博客 1746
上一篇: global-exception-handler.java.ftl 模板文件参考示例
下一篇: 代码生成器项目目录结构完整说明文档
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值