首页 > 其他分享 >@MapperScan的作用,以及与@Mapper的区别

@MapperScan的作用,以及与@Mapper的区别

时间:2024-08-07 11:59:55浏览次数:16  
标签:Mapper 区别 Spring 接口 MapperScan 添加 注解

@MapperScan的作用

  1. @MapperScan 的作用:

    • 这个注解告诉 MyBatis-Spring-Boot-Starter 自动扫描指定包(及其子包)下的所有接口。
    • 对于扫描到的每个接口,MyBatis 会自动创建一个 MapperFactoryBean。
    • 这个 MapperFactoryBean 会被注册到 Spring 容器中。
  2. 自动 IoC 管理:

    • 通过上述过程,所有在指定包下的 Mapper 接口都会自动被 Spring 容器管理。
    • 这意味着你可以直接在其他 Spring 管理的类中注入这些 Mapper,而不需要额外的注解。
  3. 不需要 @Component

    • Mapper 接口是特殊的 Spring bean,它们由 MyBatis 通过动态代理实现。
    • @Component 通常用于标记普通的 Spring 组件,而 Mapper 接口已经通过 @MapperScan 被特殊处理了。

@MapperScan(“”)和@Mapper的对比

使用 @MapperScan("") 和在每个 Mapper 接口上添加 @Mapper 注解都可以实现将 Mapper 接口注册到 Spring 容器中的目的。让我们来比较这两种方法:

  1. 使用 @MapperScan("com.hkd.mapper")

优点:

  • 集中配置,只需要在配置类上添加一次注解。
  • 减少了在每个 Mapper 接口上添加注解的重复工作。
  • 如果有新的 Mapper 接口添加到指定包中,不需要额外的配置。

缺点:

  • 可能会扫描到不需要的接口,如果包内有非 Mapper 的接口。
  1. 在每个 Mapper 接口上使用 @Mapper 注解:

优点:

  • 更加明确,每个 Mapper 接口都清楚地标识了它的用途。
  • 可以更精确地控制哪些接口被视为 Mapper。
  • 不依赖于包结构,Mapper 可以分布在不同的包中。

缺点:

  • 需要在每个 Mapper 接口上都添加注解,有些重复工作。
  • 如果忘记在新增的 Mapper 上添加注解,可能会导致该 Mapper 无法被识别。

选择建议:

  1. 对于小型项目或 Mapper 较少的情况,使用 @Mapper 注解可能更直观。

  2. 对于大型项目或 Mapper 较多的情况,使用 @MapperScan 可以减少重复工作,更易于管理。

  3. 有些开发者会同时使用两种方法:在配置类上使用 @MapperScan,同时在 Mapper 接口上使用 @Mapper。这样做可以兼顾两种方法的优点,虽然有些冗余,但可以增加代码的可读性和明确性。

标签:Mapper,区别,Spring,接口,MapperScan,添加,注解
From: https://blog.csdn.net/qq_51263863/article/details/140987406

相关文章

  • createElement 和 cloneElement 的区别
    引言在React中,组件是构建用户界面的基本单元,它们可以通过不同的方式创建和操作。两个常用的方法是React.createElement和React.cloneElement。虽然它们都与React元素的创建和操作有关,但它们的用途和功能却完全不同。了解这两个方法的区别对于有效地构建和管理React应......
  • MySQL中DayofWeek与Weekday的区别
    DAYOFWEEK(date):(1-7,周日始,美国人)这个函数返回日期date是一周中的哪一天,范围是1到7。其中,1表示周日,2表示周一,依此类推,7表示周六。这符合美国的日期习惯,即周日是一周的第一天。例如,DAYOFWEEK('2023-03-01')如果这一天是周三,将返回3。WEEKDAY(date):(0-6,周一始)WEEKDAY(......
  • lambda 中 map 和 flatMap 的区别
    lambda中map和flatMap的区别 https://blog.csdn.net/weixin_52772307/article/details/128944511 总结:当我们需要将具有层级结构的数据展平时,也就是将多层数据转换为单层数据操作时,我们可以使用flatMap方法。如果我们只是简单的对流中的数据计算或者转换时,可以使用......
  • 大模型与人工智能有什么区别?看完涨知识了
    前言人工智能是一个广泛的概念,涵盖了多个领域和技术,旨在实现各种智能化应用。大模型则是人工智能领域中的一个特定技术或方法,主要通过构建规模庞大的模型来处理复杂任务。随着科技的飞速发展,人工智能(ArtificialIntelligence,简称AI)已经成为了我们生活中不可或缺的一部分。......
  • 通配符和正则表达式区别
    通配符和正则表达式区别通配符是shell自带的用于匹配文件名的工具,多用在文件名上,比如查找find,ls,cp等等。正则表达式则需要特定命令的支持才可以使用,如:grep、sed和awk(号称Linux三剑客)、vi/vim、perl等,这些都是处理文本的工具。其次,shell对通配符与正则表达式的处理也有不同,“......
  • 在K8S中,Deployment和Statefulset有何区别?
    在Kubernetes中,Deployment和StatefulSet都是用来管理应用的资源对象,但是它们的设计目的和服务场景有所不同。下面详细解释这两种资源的区别:1.Deployment用途:Deployment主要用于管理无状态应用,即那些不需要持久化数据或者不需要唯一网络标识符的应用。它提供了一种简......
  • find . -type f -exec command {} +中,+与\;的区别
    原理逐个执行(-exec...\;)原理:每找到一个匹配的文件,find 就会启动一次指定的命令,并将该文件作为参数传递给命令。每次执行命令都是一个独立的进程。示例:如果有100个文件匹配,find 将启动100次命令,每次处理一个文件。find.-typef-execcommand{}\;批量执行......
  • 相控阵天线与普通天线在多个方面存在显著的区别
    相控阵天线与普通天线在多个方面存在显著的区别,这些区别主要体现在工作原理、性能特点、应用场景以及技术复杂度等方面。一、工作原理相控阵天线:相控阵天线由多个相同的天线单元按一定规律排列组成,这些天线单元工作在同一频率,并通过电子方式控制每个天线单元的相位差,从而实......
  • 栈、队列和数组有哪些主要区别
    1、数据存储和访问原则栈(Stack):存储原则:后进先出(LIFO,LastInFirstOut)。即最后加入的元素最先被移除。访问方式:只能访问栈顶元素。栈的插入(push)和删除(pop)操作都只能在栈顶进行。队列(Queue):存储原则:先进先出(FIFO,FirstInFirstOut)。即最早加入的元素最先被移除。访问方......
  • MapperScannerConfigurer中获取applicayion.yml配置,进行动态加载BasePackage
     由于在MapperScannerConfigurer的bean优先于@value,导致@value取出来的时候都是null,所以只能使用Environment来获取值importorg.mybatis.spring.mapper.MapperScannerConfigurer;importorg.springframework.beans.factory.annotation.Value;importorg.springframework......