Maven私服倉庫Nexus配置小結(jié)
技術(shù)前提:熟練的掌握Maven基礎(chǔ)知識
一、什么是Maven私服?
Maven 私服是一種特殊的Maven遠(yuǎn)程倉庫,它是架設(shè)在局域網(wǎng)內(nèi)的倉庫服務(wù),用來代理位于外部的遠(yuǎn)程倉庫(中央倉庫、其他遠(yuǎn)程公共倉庫)。
當(dāng)然也并不是說私服只能建立在局域網(wǎng),也有很多公司會直接把私服部署到公網(wǎng),具體還是得看公司業(yè)務(wù)的性質(zhì)是否是保密的等等,因?yàn)榫钟蚓W(wǎng)的話只能在公司用,部署到公網(wǎng)的話員工在家里也可以辦公使用。
建立了 Maven 私服后,當(dāng)局域網(wǎng)內(nèi)的用戶需要某個構(gòu)件時,會按照如下順序進(jìn)行請求和下載。
- 請求本地倉庫,若本地倉庫不存在所需構(gòu)件,則跳轉(zhuǎn)到第 2 步;
- 請求 Maven 私服,將所需構(gòu)件下載到本地倉庫,若私服中不存在所需構(gòu)件,則跳轉(zhuǎn)到第 3 步。
- 請求外部的遠(yuǎn)程倉庫,將所需構(gòu)件下載并緩存到 Maven 私服,若外部遠(yuǎn)程倉庫不存在所需構(gòu)件,則 Maven 直接報錯。
此外,一些無法從外部倉庫下載到的構(gòu)件,也能從本地上傳到私服供其他人使用。
下圖中展示了 Maven 私服的用途。
二、Maven 私服優(yōu)勢
Maven 私服具有以下 5 點(diǎn)優(yōu)勢:
節(jié)省外網(wǎng)帶寬
:大量對于外部遠(yuǎn)程倉庫的重復(fù)請求,會消耗很大量的帶寬,利用 Maven私服代理外部倉庫后,能夠消除對外部倉庫的大量重復(fù)請求,降低外網(wǎng)帶寬壓力。下載速度更快
:Maven 私服位于局域網(wǎng)內(nèi),從私服下載構(gòu)建更快更穩(wěn)定。便于部署第三方構(gòu)件
:有些構(gòu)件是無法從任何一個遠(yuǎn)程倉庫中獲得的(例如,某公司或組織內(nèi)部的私有構(gòu)件、Oracle 的 JDBC 驅(qū)動等),建立私服之后,就可以將這些構(gòu)件部署到私服中,供內(nèi)部 Maven 項(xiàng)目使用。提高項(xiàng)目的穩(wěn)定性,增強(qiáng)對項(xiàng)目的控制
:如果不建立私服,那么 Maven 項(xiàng)目的構(gòu)件就高度依賴外部的遠(yuǎn)程倉庫,若外部網(wǎng)絡(luò)不穩(wěn)定,則項(xiàng)目的構(gòu)建過程也會變得不穩(wěn)定。建立私服后,即使外部網(wǎng)絡(luò)狀況不佳甚至中斷,只要私服中已經(jīng)緩存了所需的構(gòu)件,Maven 也能夠正常運(yùn)行。- 此外,一些私服軟件(如 Nexus)還提供了很多額外控制功能,例如,權(quán)限管理、RELEASE/SNAPSHOT 版本控制等,可以對倉庫進(jìn)行一些更加高級的控制
降低中央倉庫得負(fù)荷壓力
:由于私服會緩存中央倉庫得構(gòu)件,避免了很多對中央倉庫的重復(fù)下載,降低了中央倉庫的負(fù)荷。
三、Maven 私服搭建
能夠幫助我們建立 Maven 私服的軟件被稱為 Maven 倉庫管理器(Repository Manager),主要有以下 3 種:
- Apache Archiva
- JFrog Artifactory
- Sonatype Nexus
其中,Sonatype Nexus 是當(dāng)前最流行、使用最廣泛的 Maven 倉庫管理器。本篇文章也是重點(diǎn)講解Sonatype Nexus。
關(guān)于nexus安裝:http://chabaoo.cn/article/213578.htm
本篇直接基于nexus3最新版進(jìn)行講解!
四、Sonatype Nexus介紹
Nexus 的全稱是 Nexus Repository Manager(Nexus 倉庫管理器),是 Sonatype 公司的一個產(chǎn)品。Nexus 是一個強(qiáng)大的倉庫管理器,極大地簡化了內(nèi)部倉庫的維護(hù)和外部倉庫的訪問。Nexus 分為開源版和專業(yè)版,其中開源版足以滿足大部分 Maven 用戶的需求。
Nexus 開源版具有以下優(yōu)點(diǎn):
- 占用內(nèi)存?。?8 M 左右)
- 具有基于 ExtJs 得操作界面,用戶體驗(yàn)較好
- 使用基于 Restlet 的完全 REST API
- 支持代理倉庫、宿主倉庫和倉庫組
- 基于文件系統(tǒng),不需要依賴數(shù)據(jù)庫
- 支持倉庫管理
- 支持構(gòu)件搜索
- 支持在界面上上傳構(gòu)件
五、Nexus倉庫屬性和分類
這里我直接用的nexus最新版3.54.1版本。
點(diǎn)擊左邊導(dǎo)航欄中的 Repositories(倉庫),可以看到 Nexus 自帶的幾個內(nèi)置倉庫,如下圖所示。
在倉庫列表中,每個倉庫都具有一系列屬性:
- Type:倉庫的類型,這里一共有三種
- proxy:用來代理遠(yuǎn)程公共倉庫,如 Maven 中央倉庫、JBoss 遠(yuǎn)程倉庫。
- hosted:又稱 Nexus 本地倉庫,該倉庫通常用來部署本地項(xiàng)目所產(chǎn)生的構(gòu)件。 hosted 宿主倉庫又分為:releases 和shapshots,分別表示依賴的版本的發(fā)行版、快照版。快照版依賴不能上傳到發(fā)行版?zhèn)}庫,反之亦然。nexus做了限制。
- group:倉庫組,用來聚合代理倉庫和宿主倉庫,為這些倉庫提供統(tǒng)一的服務(wù)地址,以便 Maven 可以更加方便地獲得這些倉庫中的構(gòu)件。
- Format:倉庫的格式有兩種maven2、nuget。我們是搞java的,所以新建倉庫一般都是選擇的maven2格式。
- Status:倉庫的狀態(tài),只有在線狀態(tài)才能被訪問。
- URL:倉庫的路徑
為了更加直觀的理解倉庫組、代理倉庫和宿主倉庫的概念,我們通過下圖展示它們的用途和區(qū)別。
由上圖可知:
- Maven 可以直接從宿主倉庫中下載構(gòu)件。
- Maven 也可以從代理倉庫中下載構(gòu)件,代理倉庫會從遠(yuǎn)程倉庫下載并緩存構(gòu)件。
- Maven 還可以從倉庫組中下載構(gòu)件,倉庫組會從其包含的宿主倉庫和代理倉庫中獲取構(gòu)件。
我們使用nexus私服,配置文件中配置的也就是倉庫組地址,因?yàn)閭}庫組可以把代理倉庫、宿主倉庫聚合,這樣就完美實(shí)現(xiàn):從私服下載依賴,私服倉庫找不到還能去代理倉庫那找。找到了之后緩存到私服這樣下次就能從私服直接獲取了。
六、Nexus倉庫配置以及創(chuàng)建倉庫
剛安裝好的nexus一共給我們創(chuàng)建了7個倉庫(不同的nexus版本可能有一點(diǎn)差距),我們只需要關(guān)注Format為maven2的倉庫即可,也就是一共有4個:
- maven-central:該倉庫用來代理 Maven 中央倉庫,其策略為 Release,只會下載和緩存中央倉庫中的發(fā)布版本的構(gòu)件。
- maven-releases:策略為 Release 的宿主倉庫,用來部署公司或組織內(nèi)部的發(fā)布版本構(gòu)件。
- maven-snapshots:策略為 Snapshot 的宿主倉庫,用來部署公司或組織內(nèi)部的快照版本構(gòu)件。
- maven-public:倉庫組,默認(rèn)聚合了以上三個倉庫
下面進(jìn)行一個一個講解:
(1)maven-central
我們也可以再新建一個代理倉庫,然后代理到阿里云鏡像地址。通過阿里云鏡像下載依賴要比maven中央倉庫快的多。
選擇maven2 (proxy)
其他配置默認(rèn)即可。然后代理地址寫:
https://maven.aliyun.com/repository/public
(2)maven-public
maven-public倉庫組就是將這幾個倉庫匯集到一塊,然后項(xiàng)目使用nexus,不需要配置其他倉庫的地址,只需要配置倉庫組的地址即可。
(3)maven-releases
release倉庫需要把這塊改一下,設(shè)置為Allow redeploy代表允許我們對倉庫中的依賴維護(hù)升級新版本,如果設(shè)置為disable redeploy意味著我們無法將升級版本上傳上來。
七、Nexus配置用戶角色
nexus預(yù)定了兩個用戶
admin:最高權(quán)限
- 瀏覽倉庫
- 搜索倉庫
- 上傳構(gòu)建
- 新建修改倉庫
anonymous:沒有默認(rèn)密碼,不可以登錄管理平臺,擁有的權(quán)限有如下:
- 瀏覽倉庫
- 搜索倉庫
在低的版本當(dāng)中可能會有一個deployment角色,不知道為什么新的版本當(dāng)中這個角色給取消了。
一般我們不建議maven當(dāng)中直接去配置admin賬戶,因?yàn)閍dmin賬戶有新增和刪除倉庫的權(quán)限,我們可以選擇新增一個賬戶,只給這個賬號賦予上傳依賴和下載依賴的權(quán)限即可,由于nexus是用戶角色制,所以新增賬戶前,首先我們需要新建一個角色。然后讓角色只具備上傳依賴和下載依賴的權(quán)限。然后再給用戶賦予該角色權(quán)限。
(1)新增角色
Role ID和Role Name自定義即可。
具體的需要新增的權(quán)限如下:
別忘了右下角保存!
(2)新增用戶,并指定該角色
這時候可以使用新賬號登錄測試一下,登錄后會發(fā)現(xiàn)他沒有設(shè)置的權(quán)限,這就是我們要的效果!
八、Maven SNAPSHOT(快照)
接下來我們可能會頻繁接觸SNAPSHOT版本,在這里我們先熟悉一下這個版本號。
在我們是實(shí)際開發(fā)的項(xiàng)目當(dāng)中很少會定義beat 、alpha 這些里程碑版本,因?yàn)檫@些一般都是開源框架才會定義的,他代表了一個特殊的寓意,例如beat就是測試版本,而我們經(jīng)常在開發(fā)中會定義SNAPSHOT版本。SNAPSHOT不同于里程碑版本,里程碑版本他也就是一個普通的版本名稱,說白了只是用這些英文來代表這個版本的含義,而SNAPSHOT對于私服來說是有特殊功能的。
使用場景: 大型的應(yīng)用軟件通常由多個功能模塊組成,這些模塊有時候分別于不同的團(tuán)隊(duì)負(fù)責(zé)開發(fā)。假設(shè)有兩個團(tuán)隊(duì),他們分別負(fù)責(zé)項(xiàng)目中的 member-service(會員服務(wù)) 和 user-service(用戶服務(wù)) 兩個模塊,且 member-service 需要依賴 user-service 項(xiàng)目。
基于以上假設(shè),若 user-service 團(tuán)隊(duì)正在進(jìn)行快節(jié)奏的 bug 修復(fù)及功能增強(qiáng),會在短時間內(nèi)高頻率地更新代碼以及發(fā)布版本。就會出現(xiàn)以下情況:
- user-service 團(tuán)隊(duì)每次發(fā)布新版本更新代碼時,都應(yīng)該通知member-service團(tuán)隊(duì)。
- member-service 團(tuán)隊(duì)則需要定期更新其 pom.xml 以獲得最新的版本。
這樣,勢必會影響開發(fā)效率,甚至?xí)绊戫?xiàng)目的驗(yàn)收及投產(chǎn)。要解決這個問題,其實(shí)很簡單,那就是使用 SNAPSHOT(快照)版本。
版本介紹: SNAPSHOT(快照)是一種特殊的版本,它表示當(dāng)前開發(fā)進(jìn)度的副本。與常規(guī)版本不同,快照版本的構(gòu)件在發(fā)布時,Maven 會自動為它打上一個時間戳,有了這個時間戳后,當(dāng)依賴該構(gòu)件的項(xiàng)目進(jìn)行構(gòu)建時,Maven 就能從倉庫中找到最新的 SNAPSHOT 版本文件。
默認(rèn)情況下對于快照本本的構(gòu)件,Maven 會每天從倉庫中獲取一次更新,用戶也可以在任何 Maven 命令中使用 -U
參數(shù)強(qiáng)制 Maven 檢查更新。命令如下:mvn clean package -U
SNAPSHOT 版本 VS RELEASE 版本
Maven 倉庫分為兩種,Snapshot 快照倉庫和 Release 發(fā)行倉庫。Snapshot 快照倉庫用于保存開發(fā)過程中的不穩(wěn)定 SNAPSHOT 版本,Release 發(fā)行倉庫則用來保存穩(wěn)定的 RELEASE 版本。Maven 會根據(jù)模塊的版本號(pom.xml 文件中的 version 元素)中是否帶有 -SNAPSHOT 來判斷是 SNAPSHOT 版本還是正式 RELEASE 版本。帶有 -SNAPSHOT 是SNAPSHOT(快照)版本,不帶 -SNAPSHOT 的就是正式 RELEASE(發(fā)布)版本。
九、項(xiàng)目當(dāng)中配置Nexus上傳依賴
首先找到本地maven的setting.xml(在maven安裝目錄的conf目錄下),打開后找到servers標(biāo)簽。加入以下內(nèi)容
<servers> <!-- 這是配置訪問私有倉庫的用戶名密碼 --> <server> <!-- id標(biāo)簽可以隨便填,只需要在servers中唯一即可,后面很多地方會使用該id --> <id>self-maven</id> <username>deplyment</username> <password>deplyment123</password> </server> </servers>
maven配置好了,接下來去maven項(xiàng)目中設(shè)置:
在你想上傳的模塊的pom文件中,寫入:
<distributionManagement> <repository> <!--注意這個id一定要填寫我們maven的setting.xml當(dāng)中配置的id--> <id>self-maven</id> <url>http://ip:port/repository/maven-releases/</url> </repository> <snapshotRepository> <!--注意這個id一定要填寫我們maven的setting.xml當(dāng)中配置的id--> <id>self-maven</id> <url>http://ip:port/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement>
- distributionManagement:負(fù)責(zé)將指定的構(gòu)件部署到 Nexus 指定的倉庫中。
- repository:代表上傳release版本存儲的倉庫地址
- snapshotRepository:代表上傳snapshot版本存儲的倉庫地址
- 標(biāo)簽中的 id,就是上面我們配置的server id,maven會通過這個id去server中拿用戶名密碼去訪問私服倉庫。
- 標(biāo)簽中的url,就是對應(yīng)倉庫的地址:倉庫的url復(fù)制即可,注意對應(yīng)倉庫,弄反了是傳不上去的
會根據(jù)該模塊的版本進(jìn)行自動選擇,如果你的版本號帶有SNAPSHOT如:
<version>0.0.1-SNAPSHOT</version>
,那么會上傳到SNAPSHOT倉庫,release也是這個道理,如果版本號不存在這兩個單詞,如1.0.0,那么會選擇release倉庫上傳。
(1)接下來我們進(jìn)行測試,首先第一步準(zhǔn)備一個不是web工程的項(xiàng)目,如下:
(2)然后進(jìn)行以下步驟:
當(dāng)然也可以直接運(yùn)行maven命令:mvn clean deploy -DskipTests
(3)deploy執(zhí)行完不報錯的話就上傳成功了。
(4)由于我的項(xiàng)目設(shè)置的是1.0-SNAPSHOT,也就是SNAPSHOT版本,所以他會自動上傳到maven-snapshots倉庫當(dāng)中,如下:
十、項(xiàng)目當(dāng)中配置Nexus下載依賴
接下來,配置本地maven。還是打開setting.xml,然后添加一個如下配置:
<profiles> <profile> <id>nexus</id> <!--聲明一個或多個遠(yuǎn)程倉庫 --> <repositories> <!-- 聲明一個 Nexus 私服上的倉庫 --> <repository> <!--倉庫id,這個id就是上面配置的賬號密碼id --> <id>self-maven</id> <!-- 倉庫的名稱 --> <name>nexus</name> <!--倉庫的地址 --> <url>http://localhost:8081/repository/maven-public/</url> <!-- 是否開啟該倉庫的 release 版本下載支持 --> <releases> <enabled>true</enabled> </releases> <!-- 是否開啟該倉庫的 snapshot 版本下載支持 --> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <!-- 聲明一個或多個遠(yuǎn)程插件倉庫 --> <pluginRepositories> <!--聲明一個 Nexus 私服上的插件倉庫 --> <pluginRepository> <!--插件倉庫 id --> <id>self-maven</id> <!--插件倉庫 名稱 --> <name>nexus</name> <!-- 配置的插件倉庫的地址 --> <url>http://localhost:8081/repository/maven-public/</url> <!-- 是否開啟該插件倉庫的 release 版本下載支持 --> <releases> <enabled>true</enabled> </releases> <!-- 是否開啟該插件倉庫的 snapshot 版本下載支持 --> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> <!-- 默認(rèn)該profile生效 --> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> </profiles>
以上配置中使用了一個 id 為 nexus 的 profile,這個 profile 中包含了與倉庫相關(guān)的配置,同時配置中activeByDefault為true。當(dāng)本機(jī)有 Maven 項(xiàng)目構(gòu)建時,profile 中的倉庫配置就會應(yīng)用到項(xiàng)目中。配置當(dāng)中的url就配置我們的倉庫組地址即可:
(1)接下來進(jìn)行測試下載依賴,首先讓一個web工程引用該項(xiàng)目坐標(biāo)
(2)緊接著我們需要找到本地maven倉庫當(dāng)中的introduce包給刪除掉
根據(jù)坐標(biāo)就可以在本地倉庫找到進(jìn)行刪除,刪除前要保證引用該依賴的工程不是啟動狀態(tài),不然刪除不了
(3)再次測試web工程看看能否獲取到依賴,需要刷新該工程,讓他再次去獲取依賴。
(4)刷新過后查看倉庫已經(jīng)存在了該依賴jar,我們并沒有手動去install該項(xiàng)目,那也就意味著他是通過私服進(jìn)行下載的。
(5)假如缺少依賴,除了上面通過idea當(dāng)中的刷新,也可以選擇執(zhí)行命令來下載依賴,mvn clean install
的時候也會自動下載倉庫當(dāng)中缺少的依賴,通過下載依賴的信息我們可以知道他從哪個倉庫進(jìn)行下載依賴的:
Nexus 私服通常會與鏡像(mirror)結(jié)合使用,使 Nexus 成為所有遠(yuǎn)程倉庫的私服,這樣不僅可以從 Nexus 中獲取所有所需構(gòu)件,還能將配置集中到 Nexus 私服中,簡化 Maven 本身的配置。
我們可以創(chuàng)建一個匹配任何倉庫的鏡像,鏡像的地址為 Nexus 中倉庫的地址,這樣 Maven 對于任何構(gòu)件的下載請求都會被攔截跳轉(zhuǎn)到 Nexus 私服中,在maven的setting.xml當(dāng)中配置,其具體配置如下。
<mirrors> <mirror> <id>self-maven</id> <name>nexus name</name> <mirrorOf>*</mirrorOf> <url>http://localhost:8081/repository/maven-public/</url> </mirror> </mirrors>
之前阿里的鏡像可以注釋了,添加的鏡像標(biāo)簽解釋:
- id:之前server的id,訪問倉庫組也要拿用戶名密碼
- mirrorOf:
*
代表所有的依賴都從私服找 - url:就是倉庫組的,還是去倉庫組右邊copy即可
這樣的話項(xiàng)目就完全依賴于nexus倉庫了,假如一旦nexus掛了,整個項(xiàng)目都沒辦法下載包了,這時候可以將鏡像替換為阿里云,這樣一來除了公司內(nèi)部包無法下載,最起碼中央倉庫的包還是可以下載的。
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
十一、測試SNAPSHOT版本
我們基于上面提到的introduce工程和demo工程再順便測一下SNAPSHOT版本。一般SNAPSHOT版本是為了解決多個人同時開發(fā)所產(chǎn)生的問題,而我沒有多臺電腦,所以模擬起來也比較費(fèi)勁。
(1)我們需要手動保留一份倉庫當(dāng)中修改前的代碼。
(2)修改一下introduce工程,然后將該工程重新deploy到倉庫。
(3)刪除本地倉庫的introduce工程,將剛剛備份的introduce1改為introduce。這時候introduce1的工程代碼當(dāng)中那個輸出的還是1111111。
(4)看看demo工程通過mvn clean install -DskipTests -U
(-U是強(qiáng)制更新)是否會更新
(5)成功更新了
十二、Nexus構(gòu)件搜索
十三、手動上傳構(gòu)件
有些 Jar 文件(如 Oracle 的 JDBC 驅(qū)動)由于許可證等原因,無法存放在公開倉庫中。此外,還有一些小型的開源項(xiàng)目,它們沒有將自己的構(gòu)件分發(fā)到公共倉庫中,也沒有維護(hù)自己的倉庫,因此這些構(gòu)件是無法從公共倉庫中獲得的。若 Maven 項(xiàng)目中需要這類構(gòu)件,我們就需要將構(gòu)件下載到本地,然后手動上傳到 Nexus 私服。
(1)準(zhǔn)備一個項(xiàng)目,版本號不要是SNAPSHOT版本的
(2)mvn clean install,進(jìn)行打包
(3)在 Nexus 界面的upoad上傳,默認(rèn)是只允許上傳releases倉庫。
生成的就是一個帶有該項(xiàng)目坐標(biāo)的pom。
如果該jar包還有其他依賴,那么需要手動上傳pom.xml文件,就不能點(diǎn)擊上面的generate生成了,通過點(diǎn)擊add another asset 增加,操作如下
手動上傳jar需要注意:
首先,打包要打成不可執(zhí)行jar包;其次,jar如果有其他依賴,一定要單獨(dú)上傳pom.xml文件,否則關(guān)聯(lián)依賴無法拉取
十四、關(guān)于nexus代理倉庫狀態(tài)
online-remote available:表示該被代理倉庫可用online-ready to connect:并不是代理倉庫用不了。而是你根本還沒有一個依賴去訪問這個被代理倉庫,nexus也不知道這個被代理倉庫能不能用,所以它只能展示為待連接狀態(tài)。
新建的代理倉庫都是 online-ready to connect狀態(tài)。
代理倉庫還有一個如下配置:
Blocked:假如選中相相當(dāng)于禁用該代理倉庫。Auto blocking:該配置:表示代理倉庫會根據(jù)每次請求被代理倉庫的響應(yīng)來決定是否暫停請求這個被代理倉庫,請求無響應(yīng)就會block。
到此這篇關(guān)于Maven私服倉庫Nexus配置小結(jié)的文章就介紹到這了,更多相關(guān)Nexus 配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
BeanFactory和FactoryBean的區(qū)別示例詳解
這篇文章主要為大家介紹了BeanFactory和FactoryBean的區(qū)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Java Collection 移除元素方法及注意事項(xiàng)
這篇文章主要介紹了Java Collection 移除元素方法及注意事項(xiàng),通過一個簡單實(shí)例給大家講解,需要的朋友可以參考下2020-01-01Java實(shí)現(xiàn)支付對接常用加密方式的示例代碼
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)支付對接時常用加密方式,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一點(diǎn)幫助,需要的可以參考一下2023-02-02mybatis foreach遍歷LIST讀到數(shù)據(jù)為null的問題
這篇文章主要介紹了mybatis foreach遍歷LIST讀到數(shù)據(jù)為null的問題,具有很好的參考價值,希望對大家有所幫助。2022-02-02