SpringBoot注解@MapperScan的实现

 更新时间:2025年05月07日 08:58:18   作者:摆烂且佛系  
@MapperScan是MyBatis和MyBatis-Plus提供的SpringBoot注解,用于自动扫描并注册 Mapper 接口,使其能够被 Spring 容器管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

@MapperScan 是 MyBatis 和 MyBatis-Plus 提供的一个 Spring Boot 注解,用于自动扫描并注册 Mapper 接口,使其能够被 Spring 容器管理,并与对应的 XML 或注解 SQL 绑定。它的核心作用是简化 MyBatis Mapper 接口的配置,避免手动逐个声明。

1. 基本用法

(1)在启动类上添加 @MapperScan

@SpringBootApplication
@MapperScan("com.example.mapper") // 指定 Mapper 接口所在的包
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

作用:Spring 会扫描 com.example.mapper 包及其子包下的所有 Mapper 接口,并自动注册为 Bean。

(2)扫描多个包

@MapperScan({"com.example.mapper", "com.another.dao"})
  • 可以传入多个包路径,适用于 Mapper 分散在不同模块的情况。

2. @MapperScan 的底层原理

  • Spring 启动时,@MapperScan 会触发 MapperScannerRegistrar,扫描指定包下的接口。

  • 为每个 Mapper 接口生成代理对象(通过 JDK 动态代理或 CGLIB),并注册到 Spring 容器。

  • 代理对象会绑定对应的 SQL(XML 或注解方式),执行数据库操作。

3. 一定需要@MapperScan吗?

1. 什么情况下可以不用 @MapperScan?

(1) 使用 MyBatis 的 <mapper> 接口手动注册

如果你在 MyBatis 的全局配置文件(如 mybatis-config.xml)中手动注册了 Mapper 接口,例如:

<mappers>
    <mapper class="com.example.dao.UserDao"/>
</mappers>

则不需要 @MapperScan。但这种方式在 Spring Boot 中很少用。 

(2) 使用 @Mapper 注解标记每个 DAO 接口

如果每个 Mapper 接口都添加了 @Mapper 注解(MyBatis 提供的注解),Spring Boot 会自动扫描它们:

@Mapper // 关键注解
public interface UserDao {
    User selectById(Long id);
}

此时不需要 @MapperScan,但需确保:

  • 接口所在的包路径被 Spring Boot 主类默认扫描(即与启动类同级或子包)。
  • 项目中不存在其他冲突配置。

2. 什么情况下必须用 @MapperScan?

(1) 未使用 @Mapper 注解

如果 DAO 接口没有逐个添加 @Mapper 注解,必须通过 @MapperScan 批量指定扫描路径:

@SpringBootApplication
@MapperScan("com.example.dao") // 指定 DAO 接口所在的包
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

(2) 需要灵活控制扫描范围

当 DAO 接口分散在多个包中时:

@MapperScan({"com.example.dao", "com.another.package.dao"})

当需要排除某些接口时(结合自定义过滤器)。

到此这篇关于SpringBoot注解@MapperScan的实现的文章就介绍到这了,更多相关SpringBoot @MapperScan内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring配置动态数据源实现读写分离的方法

    Spring配置动态数据源实现读写分离的方法

    这篇文章主要介绍了利用Spring配置动态数据源实现读写分离的方法,文中通过示例代码介绍的很详细,相信对大家的理解和学习具有一定的参考借鉴价值,藕需要的朋友可以一起学习学习。
    2017-01-01
  • Spring MVC Mybatis多数据源的使用实例解析

    Spring MVC Mybatis多数据源的使用实例解析

    项目需要从其他网站获取数据,因为是临时加的需求,这篇文章主要介绍了Spring MVC Mybatis多数据源的使用实例解析,需要的朋友可以参考下
    2016-12-12
  • springboot+mybatis拦截器方法实现水平分表操作

    springboot+mybatis拦截器方法实现水平分表操作

    这篇文章主要介绍了springboot+mybatis拦截器方法实现水平分表操作,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • Java程序员必备的11大IntelliJ插件(附地址)

    Java程序员必备的11大IntelliJ插件(附地址)

    这篇文章主要介绍了Java程序员必备的11大IntelliJ插件(附地址),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 浅谈Maven resrouce下filtering作用

    浅谈Maven resrouce下filtering作用

    Filtering是Maven Resources Plugin的一个功能,本文主要介绍了浅谈Maven resrouce下filtering作用,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Activiti工作流学习笔记之自动生成28张数据库表的底层原理解析

    Activiti工作流学习笔记之自动生成28张数据库表的底层原理解析

    这篇文章主要介绍了Activiti工作流学习笔记之自动生成28张数据库表的底层原理解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java动态线程池插件dynamic-tp集成过程浅析

    Java动态线程池插件dynamic-tp集成过程浅析

    这篇文章主要介绍了Java动态线程池插件dynamic-tp集成过程,dynamic-tp是一个轻量级的动态线程池插件,它是一个基于配置中心的动态线程池,线程池的参数可以通过配置中心配置进行动态的修改
    2023-03-03
  • 简单说说JVM堆区的相关知识

    简单说说JVM堆区的相关知识

    今天给大家带来的是关于Java虚拟机的相关知识,文章围绕着JVM堆区展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Java 5个人坐在一起(有关第五个人岁数的问题)

    Java 5个人坐在一起(有关第五个人岁数的问题)

    利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推,需要的朋友可以参考下
    2017-02-02
  • MyBatis中的N+1问题的解决方法

    MyBatis中的N+1问题的解决方法

    本文主要介绍了MyBatis中的N+1问题的四种解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12

最新评论