SpringBoot注解@MapperScan的實(shí)現(xiàn)
@MapperScan
是 MyBatis 和 MyBatis-Plus 提供的一個(gè) Spring Boot 注解,用于自動(dòng)掃描并注冊(cè) Mapper 接口,使其能夠被 Spring 容器管理,并與對(duì)應(yīng)的 XML 或注解 SQL 綁定。它的核心作用是簡(jiǎn)化 MyBatis Mapper 接口的配置,避免手動(dòng)逐個(gè)聲明。
1. 基本用法
(1)在啟動(dòng)類(lèi)上添加 @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)注冊(cè)為 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ì)象(通過(guò) JDK 動(dòng)態(tài)代理或 CGLIB),并注冊(cè)到 Spring 容器。
代理對(duì)象會(huì)綁定對(duì)應(yīng)的 SQL(XML 或注解方式),執(zhí)行數(shù)據(jù)庫(kù)操作。
3. 一定需要@MapperScan嗎?
1. 什么情況下可以不用 @MapperScan?
(1) 使用 MyBatis 的 <mapper> 接口手動(dòng)注冊(cè)
如果你在 MyBatis 的全局配置文件(如 mybatis-config.xml
)中手動(dòng)注冊(cè)了 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 主類(lèi)默認(rèn)掃描(即與啟動(dòng)類(lèi)同級(jí)或子包)。
- 項(xiàng)目中不存在其他沖突配置。
2. 什么情況下必須用 @MapperScan?
(1) 未使用 @Mapper 注解
如果 DAO 接口沒(méi)有逐個(gè)添加 @Mapper
注解,必須通過(guò) @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ò)濾器)。
到此這篇關(guān)于SpringBoot注解@MapperScan的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot @MapperScan內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java如何實(shí)現(xiàn)N叉樹(shù)數(shù)據(jù)結(jié)構(gòu)
這篇文章主要介紹了Java如何實(shí)現(xiàn)N叉樹(shù)數(shù)據(jù)結(jié)構(gòu)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05一文詳解SpringBoot如何使用pageHelper做分頁(yè)處理
分頁(yè)是常見(jiàn)大型項(xiàng)目都需要的一個(gè)功能,PageHelper是一個(gè)非常流行的MyBatis分頁(yè)插件,下面就跟隨小編一起來(lái)了解下SpringBoot是如何使用pageHelper做分頁(yè)處理的吧2025-03-03Java 實(shí)戰(zhàn)項(xiàng)目之家居購(gòu)物商城系統(tǒng)詳解流程
讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)家居購(gòu)物商城系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11