十分钟了解 @MapperScan

@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 的底层原理

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

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

  3. 代理对象会绑定对应的 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"})
  • 当需要排除某些接口时(结合自定义过滤器)。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度解析 MindTorch:无缝迁移 PyTorch 到 MindSpore 的高效工具

在深度学习领域&#xff0c;框架的选择往往取决于开发者的习惯、硬件支持以及项目需求。PyTorch 作为当前最受欢迎的深度学习框架之一&#xff0c;以其动态图机制和简洁的 API 设计深受开发者喜爱。然而&#xff0c;随着昇腾硬件的崛起&#xff0c;如何高效地利用昇腾的强大计算…

[250506] Auto-cpufreq 2.6 版本发布:带来增强的 TUI 监控及多项改进

目录 Auto-cpufreq 2.6 版本发布&#xff1a;带来增强的 TUI 监控及多项改进 Auto-cpufreq 2.6 版本发布&#xff1a;带来增强的 TUI 监控及多项改进 Auto-cpufreq&#xff0c;一款适用于 Linux 的免费开源自动 CPU 速度与功耗优化器&#xff0c;已发布其最新版本 2.6。该工具…

Linux 更改内存交换 swap 为 zram 压缩,减小磁盘写入

1、查看当前 swap 的方式 swapon --show 我这里是默认的 swap 文件&#xff0c;大小为 2G。 2、安装 zram Ubuntu 下&#xff1a; sudo apt install zram-tools安装后默认会启动&#xff1a; 3、关闭默认的 swap 文件 sudo swapoff /swapfile 其次是关闭 /etc/fstab 中的 …

ORCAD打印pdf

1 笔记本电脑绑定了打印机&#xff0c;要改成这个

C++中指针使用详解(4)指针的高级应用汇总

C 中指针的高级应用非常丰富&#xff0c;掌握这些内容能让你写出更高性能、更底层控制力强的代码。下面是应用模块梳理和例子讲解。 目录预览 函数指针与回调机制指针数组 vs 数组指针指针与类成员函数&#xff08;成员函数指针&#xff09;智能指针&#xff08;unique_ptr, s…

图像处理软件imgPro—调参救星!

推荐一款图像处理软件imgPro&#xff0c;该软件是逛B站时偶然间发现&#xff0c;虽然up主是新号&#xff0c;但是视频中看起来非常实用&#xff01; 核心是多种算法高效调参&#xff0c;亮点是自动生成源码&#xff01;这您受得了吗&#xff1f;调试之后&#xff0c;直接复制代…

DOM基础学习

一、DOM文档对象模型 通常将DOM看作一颗“树”&#xff0c;DOM将整个文档看作一颗“家谱树 ” 二、对象 用户定义的对象内建对象&#xff08;Array、Date、Math&#xff09;宿主对象 三、节点 node 元素节点&#xff08;element node&#xff09;文本节点&#xff08;text…

初识人工智能、机器学习、深度学习和大模型

文章目录 1. 前言2. 相关概念3. 层级关系4. 应用场景对比4. 实际案例 初识人工智能、机器学习、深度学习和大模型 1. 前言 之前经常听人说AI、机器学习&#xff0c;深度学习之类的词汇&#xff0c;总是傻傻的不了解他们的区别&#xff0c;近来有空&#xff0c;来通俗说说个人看…

n8n系列(1)初识n8n:工作流自动化平台概述

1. 引言 随着各类自动化工具的涌现,n8n作为一款开源的工作流自动化平台,凭借其灵活性、可扩展性和强大的集成能力,正在获得越来越多技术团队的青睐。 本文作为n8n系列的开篇,将带您全面了解这个强大的自动化平台,探索其起源、特性以及与其他工具的差异,帮助您判断n8n是否…

Linux:web服务

一、nginx的安装及启用 1、为主机配置IP和搭建软件仓库 &#xff08;1&#xff09;IP的配置 &#xff08;2&#xff09;搭建软件仓库 2、 web服务的安装与启用 &#xff08;1&#xff09;nginx的端口 更改nginx端口号 效果 &#xff08;2&#xff09; 默认发布目录 修改默认发…

用卷积神经网络 (CNN) 实现 MNIST 手写数字识别

在深度学习领域&#xff0c;MNIST 手写数字识别是经典的入门级项目&#xff0c;就像编程世界里的 “Hello, World”。卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;作为处理图像数据的强大工具&#xff0c;在该任务中展现出卓越的性能。本…

从 MDM 到 Data Fabric:下一代数据架构如何释放 AI 潜能

从 MDM 到 Data Fabric&#xff1a;下一代数据架构如何释放 AI 潜能 —— 传统治理与新兴架构的范式变革与协同进化 引言&#xff1a;AI 规模化落地的数据困境 在人工智能技术快速发展的今天&#xff0c;企业对 AI 的期望已从 “单点实验” 转向 “规模化落地”。然而&#…

苍穹外卖部署到云服务器使用Docker

部署前端 1.创建nginx镜像 docker pull nginx 2.宿主机&#xff08;云服务器&#xff09;创建挂载目录和文件 最好手动创建 而不是通过docker run创建&#xff0c;否则nginx.conf 默认会被创建为文件夹 nginx.conf 和html可以直接从黑马给的资料里导入 3.运行nginx容器&am…

C++ 渗透 数据结构中的二叉搜索树

欢迎来到干货小仓库 "沙漠尽头必是绿洲。" --面对技术难题时&#xff0c;坚持终会看到希望。 1.二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一颗空树&#xff0c;或者是具有以下性质的二叉树&#xff1a; a、若它的左子树不为空&#xff0c;则…

实现滑动选择器从离散型的数组中选择

1.使用原生的input 详细代码如下&#xff1a; <template><div class"slider-container"><!-- 滑动条 --><inputtype"range"v-model.number"sliderIndex":min"0":max"customValues.length - 1"step&qu…

ARM寻址方式

寻址方式指的是确定操作数位置的方式。 寻址方式&#xff1a; 立即数寻址 直接寻址&#xff08;绝对寻址&#xff09;&#xff0c;ARM不支持这种寻址方式&#xff0c;但所有CISC处理器都支持 寄存器间接寻址 3种寻址方式总结如下&#xff1a; 助记符 RTL格式 描述 ADD r0,r1…

学苑教育杂志学苑教育杂志社学苑教育编辑部2025年第9期目录

专题研究 核心素养下合作学习在初中数学中的应用 郑铁洪; 4-6 教育管理 小学班级管理应用赏识教育的策略研究 芮望; 7-9 课堂教学 小学数学概念教学的实践策略 刘淑萍; 10-12 “减负提质”下小学五年级语文课堂情境教学 王利;梁岩; 13-15 小练笔的美丽转身…

关于类型转换的细节(隐式类型转换的临时变量和理解const权限)

文章目录 前言类型转换的细节1. 类型转换的临时变量细节二&#xff1a;const与指针 前言 关于类型转换的细节&#xff0c;这里小编和大家探讨两个方面&#xff1a; 关于类型转化的临时变量的问题const关键字的权限问题 — 即修改权限。小编或通过一道例题&#xff08;配图&am…

技术对暴力的削弱

信息时代的大政治分析&#xff1a;效率对暴力的颠覆 一、工业时代勒索逻辑的终结 工厂罢工的消亡 1930年代通用汽车罢工依赖工厂的物理集中、高资本投入和流水线脆弱性&#xff0c;通过暴力瘫痪生产实现勒索。 信息时代企业分散化、资产虚拟化&#xff08;如软件公司可携带代码…

深入理解分布式锁——以Redis为例

一、分布式锁简介 1、什么是分布式锁 分布式锁是一种在分布式系统环境下&#xff0c;通过多个节点对共享资源进行访问控制的一种同步机制。它的主要目的是防止多个节点同时操作同一份数据&#xff0c;从而避免数据的不一致性。 线程锁&#xff1a; 也被称为互斥锁&#xff08…