Spring Boot + MyBatis Plus 項目中,entity和 XML 映射文件的查找機制

在 Spring Boot + MyBatis - Plus 項目中,entity(實體類)和 XML 映射文件的查找機制有其默認規則,也可通過配置調整,以下詳細說明:

一、實體類(entity)的查找

MyBatis - Plus 能找到實體類,主要基于以下默認規則:

  1. 包掃描
    在項目啟動類上,一般會有?@MapperScan?注解,例如?@MapperScan("com.neuedu.hisweb.mapper")?,它的作用是掃描指定包下的 Mapper 接口。同時,MyBatis - Plus 會根據 Mapper 接口中定義的泛型(如?BaseMapper<User>?里的?User?),去對應的包路徑(通常是與 Mapper 接口有合理包層級關聯,或者通過?@Entity@TableName?等注解配合)中查找實體類。只要實體類的包路徑能被合理掃描到(項目的包結構符合 Spring Boot 組件掃描的默認規則,即啟動類所在包為基礎,掃描其下級包),就可以找到。
    比如你的項目啟動類在?com.neuedu.hisweb?包下,那么?com.neuedu.hisweb.entity?包下的實體類,會被自動掃描識別,因為 Spring Boot 默認會掃描啟動類所在包及其子包下的組件。
  2. 注解輔助
    實體類上的?@TableName?注解,用于指定該實體類對應的數據庫表名,這也幫助 MyBatis - Plus 建立實體類和數據庫表的映射關系,在操作數據庫時能正確關聯。

所以,實體類只要在合理的包路徑下(能被 Spring Boot 組件掃描到),無需額外配置就能被找到?,MyBatis - Plus 會基于 Mapper 接口泛型和包掃描機制定位到它們。

二、XML 映射文件的查找(分兩種情況)

情況 1:使用 MyBatis - Plus 且主要用其自帶 CRUD ,少用自定義 XML

如果項目中主要使用 MyBatis - Plus 提供的?BaseMapper?自帶的 CRUD 方法(如?insertselectById?等 ),基本不用自己寫 XML 映射文件,此時不需要額外配置 XML 路徑,MyBatis - Plus 內部機制可正常工作。

情況 2:有自定義 XML 映射文件(如寫復雜 SQL )

若有自定義的 XML 映射文件(比如放在?src/main/resources/mapper?目錄,或者和 Mapper 接口同一目錄等不同位置 ),默認情況下 MyBatis - Plus 不一定能直接找到,需要配置?mapper - locations?來指定路徑 ,常見配置方式如下:

  • 在?application.yml?中配置

mybatis - plus:mapper - locations: classpath:mapper/*.xml  # 假設 XML 文件放在 resources/mapper 目錄下,根據實際路徑調整type - aliases - package: com.neuedu.hisweb.entity  # 實體類包路徑,讓 XML 中可直接用實體類名作為類型別名
  • 如果 XML 文件和 Mapper 接口放在同一目錄(比如?com/neuedu/hisweb/mapper?下,和?xxxMapper.java?放一起 ),需要確保 Maven 打包時能把 XML 文件一起打進?classpath?。因為默認 Maven 只會把?src/main/resources?下的文件打包,Java 目錄下的 XML 可能不會被打包進去,此時需要在?pom.xml?中添加資源過濾配置:

<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include>  <!-- 包含 Java 目錄下的 XML 文件 --></includes></resource><resource><directory>src/main/resources</directory></resource></resources>
</build>

然后在?application.yml?中配置:

mybatis - plus:mapper - locations: classpath:com/neuedu/hisweb/mapper/*.xml  # 精確指定 XML 所在的包路徑(和 Mapper 接口同一目錄時)type - aliases - package: com.neuedu.hisweb.entity 

總結來說,實體類默認靠合理包掃描就能被找到;XML 映射文件若有自定義的,通常需要配置?mapper - locations?以及注意打包時的資源包含,除非遵循了 MyBatis - Plus 能自動識別的特殊規則(但這種情況較少,一般復雜項目都會有自定義 XML ,需要配置 )?。你可根據自己項目是否有自定義 XML 映射文件,來判斷是否需要額外配置。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84519.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84519.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84519.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

itvbox綠豆影視tvbox手機版影視APP源碼分享搭建教程

我們先來看看今天的主題&#xff0c;tvbox手機版&#xff0c;然后再看看如何搭建&#xff1a; 很多愛好者都希望搭建自己的影視平臺&#xff0c;那該如何搭建呢&#xff1f; 后端開發環境&#xff1a; 1.易如意后臺管理優化版源碼&#xff1b; 2.寶塔面板&#xff1b; 3.ph…

Vue Electron 使用來給若依系統打包成exe程序,出現登錄成功但是不跳轉頁面(已解決)

描述 用vue打成electron可執行exe程序時&#xff0c;發現個問題&#xff0c;一直登錄之后&#xff0c;頁面跳轉不了&#xff0c;其實后臺請求已成功發送 那么懷疑就是vue頁面跳轉的事情 解決 大部分vue 前段項目 會使用 js-cookie 這個庫 來操作瀏覽器的cookie 然而這個庫 …

Blob設置type為application/msword將document DOM節點轉換為Word(.doc,.docx),并下載到本地

core code // 導出為Word文檔downloadWord({ dom, fileName "", fileType "doc", l {} } {}) {l.show && l.show();// 獲取HTML內容const content dom.innerHTML;// 構建Word文檔的HTML結構const html <!DOCTYPE html><html>&l…

無需 Mac,使用Appuploader簡化iOS上架流程

作為開發者&#xff0c;尤其是從事跨平臺開發的團隊&#xff0c;iOS應用上架一直是一項繁瑣且挑戰重重的工作。盡管Flutter、React Native等框架使得我們可以在不同平臺之間共享代碼&#xff0c;iOS上架仍然是一個不可忽視的難題。因為它不僅僅涉及代碼構建&#xff0c;還涉及到…

【JVM】Java虛擬機(二)——垃圾回收

目錄 一、如何判斷對象可以回收 &#xff08;一&#xff09;引用計數法 &#xff08;二&#xff09;可達性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;標記清除 &#xff08;二&#xff09;標記整理 &#xff08;三&#xff09;復制 &#xff08;四&#xff…

Android 實現可拖動的ImageView

Android 實現可拖動的ImageView 代碼實現&#xff1a; public class DraggableImageView extends AppCompatImageView {private float lastTouchX;private float lastTouchY;public DraggableImageView(Context context) {super(context);init();}public DraggableImageView(C…

微信小程序中wxs

一、先新建wxs文件subutil.wxs 1、寫過濾器 //return class var isClass function(val) {if (val 0) {return grid-item} else if (val 1) {return temperature-error-slot} else if (val 2) {return chargingCycles-error-slot} else {return unrecognized-slot} } 2、…

Nginx攻略

&#x1f916; 作者簡介&#xff1a;水煮白菜王&#xff0c;一位前端勸退師 &#x1f47b; &#x1f440; 文章專欄&#xff1a; 前端專欄 &#xff0c;記錄一下平時在博客寫作中&#xff0c;總結出的一些開發技巧和知識歸納總結?。 感謝支持&#x1f495;&#x1f495;&#…

常見系統設計

秒殺系統 前端層&#xff1a; 靜態資源緩存&#xff1a;通過CDN緩存商品圖片、頁面靜態HTML&#xff0c;減少回源請求。 請求合并&#xff1a;合并用戶頻繁刷新的請求&#xff08;如10秒內僅允許一次真實請求&#xff09;。 端側限流&#xff1a;通過JS或APP端限制用戶高頻點擊…

git撤回commit

最常見的幾種撤回方式&#xff1a; 目標使用命令是否保留修改撤回最后一次 commit&#xff0c;但保留代碼修改git reset --soft HEAD~1? 保留撤回最后一次 commit&#xff0c;并丟棄修改git reset --hard HEAD~1? 丟棄撤回某個 commit&#xff0c;但保留后續提交git revert …

docker 安裝運行mysql8.4.4

先前一直使用mysql5.7&#xff0c;最新公司新項目&#xff0c;無意翻閱看下5.x版本mysql官方已經不再支持&#xff0c;于是準備選用MySQL8&#xff0c;官方8.4版本是個長期支持版本&#xff0c;選則最新版本8.4.4&#xff0c;如下是MySQL官方對版本支持計劃 MySQL版本下載查看地…

[java八股文][MySQL面試篇]索引

索引是什么&#xff1f;有什么好處&#xff1f; 索引類似于書籍的目錄&#xff0c;可以減少掃描的數據量&#xff0c;提高查詢效率。 如果查詢的時候&#xff0c;沒有用到索引就會全表掃描&#xff0c;這時候查詢的時間復雜度是On如果用到了索引&#xff0c;那么查詢的時候&a…

低代碼平臺的版本管理深度解析

引言 在當今快速發展的軟件開發領域&#xff0c;低代碼平臺憑借其可視化界面和拖拽功能&#xff0c;極大地減少了手動編碼的工作量&#xff0c;顯著提高了開發效率和質量。它提供了豐富的預構建模塊、組件和服務&#xff0c;讓開發者能夠根據業務需求和邏輯進行組合與配置&…

Springboot項目由JDK8升級至JDK17全過程教程【文末附源碼】

1. 前言 最近一直想把我的開源項目maple-boot升級到jdk17版本&#xff0c;然后接入Spring AI。拖延癥犯了一直拖拖拖&#xff0c;最近時間空閑較多&#xff0c;開始陸續著手升級。 整個升級過程 計劃分為3步。 step1&#xff1a;先將項目升級到jdk17&#xff0c;使用正常ste…

同步與異步:軟件工程中的時空藝術與實踐智慧-以蜻蜓hr人才系統舉例-優雅草卓伊凡

同步與異步&#xff1a;軟件工程中的時空藝術與實踐智慧-以蜻蜓hr人才系統舉例-優雅草卓伊凡 概念解析&#xff1a;時空維度的編程范式 在軟件開發的宇宙中&#xff0c;同步(Synchronous)與異步(Asynchronous)是兩種根本不同的執行模式&#xff0c;它們塑造了程序與時間和空間…

TF-IDF算法的代碼實踐應用——關鍵詞提取、文本分類、信息檢索

回顧&#xff1a;TF-IDF算法詳解與實踐總結 上一篇文章我們深入剖析了TF-IDF的原理與細節&#xff0c;但實踐才是檢驗真理的唯一標準&#xff01;今天&#xff0c;我們將從“紙上談兵”轉向“實戰演練”&#xff1a;通過純Python手寫實現與調用sklearn工具包兩種方式&#xff0…

前端面試寶典---事件循環面試題

瀏覽器進程模型與 JavaScript 執行機制 現代瀏覽器采用多進程架構&#xff0c;包含瀏覽器進程、渲染進程、網絡進程等多個核心進程。每個標簽頁會獨立創建一個渲染進程&#xff0c;負責頁面內容的解析、渲染和執行腳本代碼。 JavaScript 的單線程特性 JavaScript 采用單線程…

postman調用接口報錯401, Unauthorized, Invalid Token. null解決辦法

1、先登錄系統&#xff0c;F12找到token并復制 2、postman里選中Authorization,下拉選中選擇Bearer Token,把復制好的token黏貼到右側輸入框&#xff0c;如下所示&#xff1a; 3、如果是json格式的參數拷貝到Body中&#xff0c;如下所示&#xff1a; 4、 接口調用成功

C++----剖析list

前面學習了vector和string&#xff0c;接下來剖析stl中的list&#xff0c;在數據庫中學習過&#xff0c;list邏輯上是連續的&#xff0c;但是存儲中是分散的&#xff0c;這是與vector這種數組類型不同的地方。所以list中的元素設置為一個結構體&#xff0c;將list設計成雙向的&…

為什么已經有 Nginx 了,還需要服務網關?

在當前微服務架構中&#xff0c;雖然 Nginx 是一個高性能的反向代理和負載均衡服務器&#xff0c;但在實際使用中仍然存在諸多局限性。為了滿足運維效率、功能統一治理以及與微服務生態集成的需求&#xff0c;通常會在 Nginx 和業務服務之間引入一層基于 Java 實現的服務網關&a…