日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MapStruct解决数据传输对象转换的繁琐

發(fā)布時間:2024/4/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MapStruct解决数据传输对象转换的繁琐 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

每層有自己的數(shù)據(jù)傳輸對象,當(dāng)數(shù)據(jù)流程到該層由需要將數(shù)據(jù)轉(zhuǎn)成符合要求的格式,比如:當(dāng)數(shù)據(jù)由應(yīng)用層流轉(zhuǎn)到服務(wù)層則需要將數(shù)據(jù)轉(zhuǎn)成DTO格式,當(dāng)數(shù)據(jù)由服務(wù)層流向持久層則需要將數(shù)據(jù)轉(zhuǎn)成Entity格式數(shù)據(jù)

下邊的代碼數(shù)據(jù)由服務(wù)層流向持久層:

public MerchantDTO createMerchant(MerchantDTO merchantDTO) {Merchant entity = new Merchant();//設(shè)置審核狀態(tài)0‐未申請,1‐已申請待審核,2‐審核通過,3‐審核拒絕entity.setAuditStatus("0");//設(shè)置聯(lián)系人entity.setUsername(merchantDTO.getUsername());//設(shè)置手機號entity.setMobile(merchantDTO.getMobile());//...//保存商戶信息merchantMapper.insert(entity);//將新增商戶的id回寫到merchantDTOmerchantDTO.setId(entity.getId());return merchantDTO; }

上邊代碼的問題是:由merchantDTO轉(zhuǎn)成entity實現(xiàn)過程繁瑣。

MapStruct是一個代碼生成器,它基于約定優(yōu)于配置的方法大大簡化了Java Bean對象之間的映射轉(zhuǎn)換的實現(xiàn)。MapStruct 使用簡單的方法即可完成對象之間的轉(zhuǎn)換,它速度快、類型安全且易于理解。

官方地址:https://mapstruct.org/

1)添加依賴

在使用MapStruct的工程添加MapStruct依賴:

<dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct‐jdk8</artifactId> </dependency> <dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct‐processor</artifactId><version>${org.mapstruct.version}</version> </dependency>

2)服務(wù)層對象轉(zhuǎn)換

在商戶服務(wù)工程定義商戶對象轉(zhuǎn)換類

定義MerchantConvert轉(zhuǎn)換類,使用@Mapper注解快速實現(xiàn)對象轉(zhuǎn)換

@Mapper public interface MerchantCovert {MerchantCovert INSTANCE = Mappers.getMapper(MerchantCovert.class);MerchantDTO entity2dto(Merchant entity);Merchant dto2entity(MerchantDTO dto); }

在MerchantCovert中定義測試方法:

public static void main(String[] args) {//dto轉(zhuǎn)entityMerchantDTO merchantDTO = new MerchantDTO();merchantDTO.setUsername("測試");merchantDTO.setPassword("111");Merchant entity = MerchantCovert.INSTANCE.dto2entity(merchantDTO);//entity轉(zhuǎn)dtoentity.setMobile("123444554");MerchantDTO merchantDTO1 = MerchantCovert.INSTANCE.entity2dto(entity);System.out.println(merchantDTO1); }

List數(shù)據(jù)也可以轉(zhuǎn)換:

在MerchantCovert中定義list的方法,如下:

//list之間的轉(zhuǎn)換 List<MerchantDTO> listentity2dto(List<Merchant> list);

測試:

在main方法編寫list之間的轉(zhuǎn)換測試

//測試list之間的轉(zhuǎn)換 List<Merchant> list_entity = new ArrayList<>(); list_entity.add(entity); List<MerchantDTO> merchantDTOS = MerchantCovert.INSTANCE.listentity2dto(list_entity); System.out.println(merchantDTOS);

3)應(yīng)用層對象轉(zhuǎn)換

在商戶平臺應(yīng)用工程定義商戶對象轉(zhuǎn)換類

@Mapper public interface MerchantRegisterConvert {MerchantRegisterConvert INSTANCE = Mappers.getMapper(MerchantRegisterConvert.class);MerchantDTO vo2dto(MerchantRegisterVO vo);MerchantRegisterVO dto2vo(MerchantDTO dto); }

1、優(yōu)化服務(wù)層代碼

修改商戶服務(wù)工程MerchantServiceImpl中的createMerchant方法:

public MerchantDTO createMerchant(MerchantDTO merchantDTO) {//將dto轉(zhuǎn)成entityMerchant entity = MerchantCovert.INSTANCE.dto2entity(merchantDTO);//設(shè)置審核狀態(tài)0‐未申請,1‐已申請待審核,2‐審核通過,3‐審核拒絕entity.setAuditStatus("0");//保存商戶信息merchantMapper.insert(entity);//將entity轉(zhuǎn)成 dtoMerchantDTO merchantDTONew = MerchantCovert.INSTANCE.entity2dto(entity);return merchantDTONew; }

2、代碼應(yīng)用層代碼

修改商戶平臺應(yīng)用工程MerchantController中的registerMerchant方法:

@PostMapping("/merchants/register") public MerchantRegisterVO registerMerchant(@RequestBody MerchantRegisterVO merchantRegister){//校驗驗證碼smsService.verificationMessageCode(merchantRegister.getVerifiykey(),merchantRegister.getVerifiyCode());//注冊商戶MerchantDTO merchantDTO = MerchantRegisterConvert.INSTANCE.vo2dto(merchantRegister);merchantService.createMerchant(merchantDTO);return merchantRegister; }

?

總結(jié)

以上是生活随笔為你收集整理的MapStruct解决数据传输对象转换的繁琐的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。