MyBatis中 @Mapper 和 @MapperScan 的区别与使用解析

 更新时间:2025年01月22日 14:38:05   作者:平平无奇的AC狂热小子  
本文介绍了SpringBoot中MyBatis的两个常用注解:@Mapper和@MapperScan,@Mapper用于标记单个Mapper接口,而@MapperScan用于批量扫描指定包下的所有Mapper接口,两者都有各自适用的场景,选择合适的注解可以提高开发效率并使代码更加简洁,感兴趣的朋友一起看看吧

在开发基于 Spring BootMyBatis 的应用时,我们经常会遇到两个非常常用的注解:@Mapper@MapperScan。这两个注解的主要作用是帮助 MyBatis 框架识别和管理 Mapper 接口,然而它们在实际应用中有不同的使用方式和适用场景。

本文将深入解析 @Mapper@MapperScan 的区别与使用方式,帮助大家更好地理解它们的作用,并在实际开发中做出更好的选择。

1. @Mapper 注解

@Mapper 是 MyBatis 提供的注解,用来标记 Mapper 接口。它告诉 MyBatis 这个接口是一个 Mapper,MyBatis 将会自动生成对应的实现类,并使其能通过依赖注入被 Spring 管理。

使用方法

在 Mapper 接口上直接加上 @Mapper 注解即可:

import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {
    User findById(int id);
    List<User> findAll();
}

@Mapper 的作用

  • 标记接口@Mapper 注解标记这个接口是一个 MyBatis 的 Mapper 接口,MyBatis 会自动为这个接口生成代理对象。
  • 交给 Spring 管理:通过 @Mapper,接口将被 Spring 容器扫描并作为 Bean 管理。Spring 会负责将数据源注入到对应的 SQL 会话中,完成 SQL 操作。
  • 简洁明了:每个 Mapper 接口都需要标注 @Mapper 注解,简洁直接。

使用场景

  • 如果项目中的 Mapper 接口较少,且不需要批量扫描 Mapper 接口,使用 @Mapper 标注在每个 Mapper 接口上是非常直接和简单的。
  • 适用于小型项目或对 Mapper 注册没有特殊要求的情况。

2. @MapperScan 注解

@MapperScan 是 Spring 提供的注解,用来批量扫描指定包路径下的所有 Mapper 接口。通过 @MapperScan 注解,Spring 会自动扫描并注册所有符合条件的 Mapper 接口,省去了在每个接口上都添加 @Mapper 注解的麻烦。

使用方法

在 Spring Boot 的主类或者配置类上添加 @MapperScan 注解,指定要扫描的包路径:

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.mapper") // 批量扫描包路径下的所有 Mapper 接口
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@MapperScan 的作用

  • 批量扫描:通过 @MapperScan 指定一个包路径,Spring 会自动扫描该包下的所有 Mapper 接口,并将其注册为 MyBatis 的 Mapper。
  • 简化配置:减少在每个接口上单独添加 @Mapper 注解的繁琐,可以更集中地管理 Mapper 接口。
  • 灵活配置:如果项目有多个 Mapper 包,可以使用多个 @MapperScan 注解指定不同的包路径。

使用场景

  • 当项目中有多个 Mapper 接口时,使用 @MapperScan 可以避免每个 Mapper 接口上都加 @Mapper 注解,使代码更加简洁。
  • 适用于中大型项目,尤其是在有多个包管理多个 Mapper 接口的情况下,@MapperScan 可以提供更高效的管理方式。

3. @Mapper 和 @MapperScan 的对比

特性@Mapper@MapperScan
作用范围标注在单个 Mapper 接口上批量扫描指定包下的所有 Mapper 接口
使用场景Mapper 接口较少,或者需要单独控制 Mapper 注册Mapper 接口较多,想要批量管理
代码简洁性每个接口需要标注 @Mapper 注解只需在启动类或配置类上标注一次
灵活性可以对每个 Mapper 接口进行精细控制批量扫描,适合大规模 Mapper 管理

4. 实际开发中如何选择

  • 小型项目或简单场景:如果你的项目中只有少数的 Mapper 接口,并且不涉及复杂的包结构,可以使用 @Mapper 注解在每个 Mapper 接口上,简单直接。
  • 中大型项目或复杂场景:如果项目中有大量的 Mapper 接口,并且这些接口分布在多个包中,使用 @MapperScan 会更方便,避免了在每个接口上都添加 @Mapper 注解,也可以更方便地进行包路径的管理和配置。

示例:多个包下的 Mapper 扫描

假设项目中有多个包包含不同的 Mapper 接口:

@MapperScan("com.example.mapper.user")  // 扫描 User 相关的 Mapper
@MapperScan("com.example.mapper.order") // 扫描 Order 相关的 Mapper

这种情况下,你可以分别为不同的模块或领域指定扫描路径,使得项目结构更加清晰。

5. 总结

@Mapper@MapperScan 都是 MyBatis 与 Spring Boot 集成时非常重要的注解,它们各有特点和适用场景:

  • @Mapper 注解适合 Mapper 接口较少或需要手动管理接口的情况,简单明了,控制粒度高。
  • @MapperScan 注解适合 Mapper 接口较多或需要批量扫描接口的情况,简化了配置和管理。

根据项目的复杂度和需求,选择合适的方式来管理你的 Mapper 接口,能提高开发效率并使代码更加简洁。希望本文能够帮助你更好地理解 @Mapper@MapperScan 的使用,提升开发中的代码质量和可维护性。

参考资料

Spring Boot MyBatis 官方文档

MyBatis 官方文档

到此这篇关于MyBatis中 @Mapper 和 @MapperScan 的区别与使用解析的文章就介绍到这了,更多相关MyBatis  @Mapper 和 @MapperScan 使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决SpringCloud Config结合github无法读取配置的问题

    解决SpringCloud Config结合github无法读取配置的问题

    这篇文章主要介绍了解决SpringCloud Config结合github无法读取配置的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • SpringBoot WebSocket实时监控异常的详细流程

    SpringBoot WebSocket实时监控异常的详细流程

    最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安排员工去处理。这篇文章主要介绍了SpringBoot WebSocket实时监控异常的全过程,感兴趣的朋友一起看看吧
    2021-10-10
  • 详解Mybatis中的select方法

    详解Mybatis中的select方法

    这篇文章主要介绍了Mybatis的select方法,通过代码给大家详细介绍了selectByExample方法,selectById方法,需要的朋友可以参考下
    2018-07-07
  • MyBatis-Plus通用中等、大量数据分批查询和处理方法

    MyBatis-Plus通用中等、大量数据分批查询和处理方法

    文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式查询以优化大数据量处理,感兴趣的朋友一起看看吧
    2025-07-07
  • spring boot + jpa + kotlin入门实例详解

    spring boot + jpa + kotlin入门实例详解

    这篇文章主要介绍了spring boot + jpa + kotlin入门实例详解 ,需要的朋友可以参考下
    2017-07-07
  • Springboot整合多数据源配置流程详细讲解

    Springboot整合多数据源配置流程详细讲解

    这篇文章主要介绍了Springboot整合多数据源配置流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-03-03
  • MyBatis解决模糊查询包含特殊字符问题

    MyBatis解决模糊查询包含特殊字符问题

    这篇文章主要介绍了MyBatis解决模糊查询包含特殊字符问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Java缺失区间的查找方法

    Java缺失区间的查找方法

    在 Java 的算法世界里,有许多有趣又具有挑战性的问题等待我们去探索,今天,跟着小编一起来深入研究缺失区间的查找秘籍,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2025-02-02
  • Java进阶中的多线程详解

    Java进阶中的多线程详解

    文章介绍了Java多线程的基本概念、创建方式、线程状态、线程同步、线程协作、线程池等内容,涵盖了线程的创建、同步、调度、终止等多方面知识,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • SpringData JPA审计功能(@CreatedDate与@LastModifiedDate)实现

    SpringData JPA审计功能(@CreatedDate与@LastModifiedDate)实现

    Spring Data JPA的审计功能提供了一种强大而灵活的机制,用于自动跟踪实体的创建和修改信息,通过使用@CreatedDate和@LastModifiedDate注解,开发者可以轻松地实现时间审计,感兴趣的可以了解一下
    2025-04-04

最新评论