spring中Mapstruct屬性映射的實現(xiàn)
整合 Mapstruct : 簡化屬性映射
解決問題:當一個對象屬性過多時,DO轉VO需要寫的字段太多了
1. 什么是 MapStruct?
MapStruct 是一個用于簡化 Java Bean 映射代碼的代碼生成器。它可以自動生成在不同 Java 對象之間進行映射的代碼,而無需手動編寫復雜的轉換邏輯。MapStruct 使得在 Java 應用程序中進行對象映射變得更加簡單、高效、可維護。
2. 為什么要使用 MapStruct?
- 簡化映射過程: 傳統(tǒng)的 Java 對象映射需要編寫大量的重復、繁瑣的代碼。MapStruct 自動生成這些映射代碼,節(jié)省了開發(fā)人員的時間和精力。
- 類型安全性: MapStruct 是基于編譯時的代碼生成,因此提供了類型安全性。在編譯時,它會檢查源對象和目標對象的類型,避免了運行時的類型錯誤。
- 高性能: 由于 MapStruct 生成的代碼是高度優(yōu)化的,所以性能非常好。相比手動編寫的映射代碼,MapStruct 生成的代碼更加高效。
- 可維護性: 當數據模型發(fā)生變化時,手動更新映射代碼可能會非常麻煩。MapStruct 能夠根據最新的數據模型自動生成新的映射代碼,確保映射邏輯與數據模型保持同步。
- 靈活性: MapStruct 提供了豐富的配置選項和擴展點,可以滿足各種復雜映射場景的需求。你可以定制生成的代碼,以適應特定的業(yè)務邏輯。
3. 添加依賴
多模塊中,在父工程模塊的pom.xm下
<!-- 版本號統(tǒng)一管理 --> <properties> // 省略... <mapstruct.version>1.5.5.Final</mapstruct.version> </properties> <!-- 統(tǒng)一依賴管理 --> <dependencyManagement> <dependencies> // 省略... <!-- Mapstruct 屬性映射 --> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>${mapstruct.version}</version> </dependency> </dependencies> </dependencyManagement> <build> <!-- 統(tǒng)一插件管理 --> <pluginManagement> <plugins> // 省略... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${java.version}</source> <!-- 根據你的 JDK 版本進行調整 --> <target>${java.version}</target> <!-- 根據你的 JDK 版本進行調整 --> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </path> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${mapstruct.version}</version> <!-- 使用時請檢查最新版本 --> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </pluginManagement> </build>
在需要使用的模塊中添加
<dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> </dependency>
在入口模塊添加編譯插件:
<build> <plugins> // 省略... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> </plugin> </plugins> </build>
4. IDEA 配置 Mapstruct
添加好了 MapStruct 依賴后,已經可以確保項目中能夠正常使用 MapStruct 了。但是,為了在開發(fā)過程中獲得更好的體驗,我們可以為 IDE 進行一些配置,從而支持 MapStruct 的自動代碼生成、代碼提示等功能。
4.1 啟用注解處理器
- 打開 IntelliJ IDEA,并加載你的項目。
- 打開
File -> Settings (或 Preferences)
。 - 在左側導航欄中選擇
Build, Execution, Deployment -> Compiler -> Annotation Processors
。 - 勾選
Enable annotation processing
。 - 在
Store generated sources relative to
下拉列表中選擇Module content root
。 - 點擊右下角
Apply
按鈕應用設置,然后,點擊ok
按鈕關閉彈框。
4.2添加MapStruct插件
雖然這不是必需的,但 MapStruct 插件可以為你提供一些很有用的功能,例如代碼提示和自動補全。
- 打開
File -> Settings (或 Preferences)
。 - 在左側選擇
Plugins
。 - 在市場 (Marketplace) 中搜索 “MapStruct” 并安裝它。
- 重啟 IntelliJ IDEA。
5. 添加 convert 接口
新建一個 /convert
包,并創(chuàng)建一個 BlogSettingsConvert
轉換接口,代碼如下:
@Mapper public interface BlogSettingsConvert { /** * 初始化 convert 實例 */ BlogSettingsConvert INSTANCE = Mappers.getMapper(BlogSettingsConvert.class); /** * 將 VO 轉化為 DO * @param bean * @return */ BlogSettingsDO convertVO2DO(UpdateBlogSettingsReqVO bean); }
注意,接口類上添加的 @Mapper 注解,導入自 org.mapstruct.Mapper, 別搞錯了哦。
6. 使用 Mapstruct 來轉換
@Service public class AdminBlogSettingsServiceImpl extends ServiceImpl<BlogSettingsMapper, BlogSettingsDO> implements AdminBlogSettingsService { @Override public Response updateBlogSettings(UpdateBlogSettingsReqVO updateBlogSettingsReqVO) { // VO 轉 DO BlogSettingsDO blogSettingsDO = BlogSettingsConvert.INSTANCE.convertVO2DO(updateBlogSettingsReqVO); blogSettingsDO.setId(1L); // 保存或更新(當數據庫中存在 ID 為 1 的記錄時,則執(zhí)行更新操作,否則執(zhí)行插入操作) saveOrUpdate(blogSettingsDO); return Response.success(); } } ingsDO.setId(1L); // 保存或更新(當數據庫中存在 ID 為 1 的記錄時,則執(zhí)行更新操作,否則執(zhí)行插入操作) saveOrUpdate(blogSettingsDO); return Response.success(); } }
將 VO
類轉換為了 DO
類,僅需要對 VO
中沒有值的字段,如 ID
字段設置一下值即可
到此這篇關于spring中Mapstruct屬性映射的實現(xiàn)的文章就介紹到這了,更多相關spring Mapstruct屬性映射內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解Java如何實現(xiàn)與JS相同的Des加解密算法
這篇文章主要介紹了如何在Java中實現(xiàn)與JavaScript相同的DES(Data Encryption Standard)加解密算法,確保在兩個平臺之間可以無縫地傳遞加密信息,希望對大家有一定的幫助2025-04-04[Java]詳解Socket和ServerSocket學習筆記
即時類應用或者即時類的游戲,HTTP協(xié)議很多時候無法滿足于我們的需求,這會,Socket對于我們來說就非常實用了。本篇文章主要介紹了Socket和ServerSocket,有興趣的可以了解一下。2016-12-12