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

