SpringBoot注解@MapperScan的實(shí)現(xiàn)
@MapperScan 是 MyBatis 和 MyBatis-Plus 提供的一個(gè) Spring Boot 注解,用于自動(dòng)掃描并注冊 Mapper 接口,使其能夠被 Spring 容器管理,并與對(duì)應(yīng)的 XML 或注解 SQL 綁定。它的核心作用是簡化 MyBatis Mapper 接口的配置,避免手動(dòng)逐個(gè)聲明。
1. 基本用法
(1)在啟動(dòng)類上添加 @MapperScan
@SpringBootApplication
@MapperScan("com.example.mapper") // 指定 Mapper 接口所在的包
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}作用:Spring 會(huì)掃描 com.example.mapper 包及其子包下的所有 Mapper 接口,并自動(dòng)注冊為 Bean。
(2)掃描多個(gè)包
@MapperScan({"com.example.mapper", "com.another.dao"})可以傳入多個(gè)包路徑,適用于 Mapper 分散在不同模塊的情況。
2. @MapperScan 的底層原理
Spring 啟動(dòng)時(shí),
@MapperScan會(huì)觸發(fā)MapperScannerRegistrar,掃描指定包下的接口。為每個(gè) Mapper 接口生成代理對(duì)象(通過 JDK 動(dòng)態(tài)代理或 CGLIB),并注冊到 Spring 容器。
代理對(duì)象會(huì)綁定對(duì)應(yīng)的 SQL(XML 或注解方式),執(zhí)行數(shù)據(jù)庫操作。
3. 一定需要@MapperScan嗎?
1. 什么情況下可以不用 @MapperScan?
(1) 使用 MyBatis 的 <mapper> 接口手動(dòng)注冊
如果你在 MyBatis 的全局配置文件(如 mybatis-config.xml)中手動(dòng)注冊了 Mapper 接口,例如:
<mappers>
<mapper class="com.example.dao.UserDao"/>
</mappers>則不需要 @MapperScan。但這種方式在 Spring Boot 中很少用。
(2) 使用 @Mapper 注解標(biāo)記每個(gè) DAO 接口
如果每個(gè) Mapper 接口都添加了 @Mapper 注解(MyBatis 提供的注解),Spring Boot 會(huì)自動(dòng)掃描它們:
@Mapper // 關(guān)鍵注解
public interface UserDao {
User selectById(Long id);
}此時(shí)不需要 @MapperScan,但需確保:
- 接口所在的包路徑被 Spring Boot 主類默認(rèn)掃描(即與啟動(dòng)類同級(jí)或子包)。
- 項(xiàng)目中不存在其他沖突配置。
2. 什么情況下必須用 @MapperScan?
(1) 未使用 @Mapper 注解
如果 DAO 接口沒有逐個(gè)添加 @Mapper 注解,必須通過 @MapperScan 批量指定掃描路徑:
@SpringBootApplication
@MapperScan("com.example.dao") // 指定 DAO 接口所在的包
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}(2) 需要靈活控制掃描范圍
當(dāng) DAO 接口分散在多個(gè)包中時(shí):
@MapperScan({"com.example.dao", "com.another.package.dao"})當(dāng)需要排除某些接口時(shí)(結(jié)合自定義過濾器)。
到此這篇關(guān)于SpringBoot注解@MapperScan的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot @MapperScan內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring配置動(dòng)態(tài)數(shù)據(jù)源實(shí)現(xiàn)讀寫分離的方法
這篇文章主要介紹了利用Spring配置動(dòng)態(tài)數(shù)據(jù)源實(shí)現(xiàn)讀寫分離的方法,文中通過示例代碼介紹的很詳細(xì),相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,藕需要的朋友可以一起學(xué)習(xí)學(xué)習(xí)。2017-01-01
Spring MVC Mybatis多數(shù)據(jù)源的使用實(shí)例解析
項(xiàng)目需要從其他網(wǎng)站獲取數(shù)據(jù),因?yàn)槭桥R時(shí)加的需求,這篇文章主要介紹了Spring MVC Mybatis多數(shù)據(jù)源的使用實(shí)例解析,需要的朋友可以參考下2016-12-12
springboot+mybatis攔截器方法實(shí)現(xiàn)水平分表操作
這篇文章主要介紹了springboot+mybatis攔截器方法實(shí)現(xiàn)水平分表操作,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08
Activiti工作流學(xué)習(xí)筆記之自動(dòng)生成28張數(shù)據(jù)庫表的底層原理解析
這篇文章主要介紹了Activiti工作流學(xué)習(xí)筆記之自動(dòng)生成28張數(shù)據(jù)庫表的底層原理解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
Java動(dòng)態(tài)線程池插件dynamic-tp集成過程淺析
這篇文章主要介紹了Java動(dòng)態(tài)線程池插件dynamic-tp集成過程,dynamic-tp是一個(gè)輕量級(jí)的動(dòng)態(tài)線程池插件,它是一個(gè)基于配置中心的動(dòng)態(tài)線程池,線程池的參數(shù)可以通過配置中心配置進(jìn)行動(dòng)態(tài)的修改2023-03-03
Java 5個(gè)人坐在一起(有關(guān)第五個(gè)人歲數(shù)的問題)
利用遞歸的方法,遞歸分為回推和遞推兩個(gè)階段。要想知道第五個(gè)人歲數(shù),需知道第四人的歲數(shù),依次類推,推到第一人(10歲),再往回推,需要的朋友可以參考下2017-02-02

