MapStruct解决数据传输对象转换的繁琐
每層有自己的數(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è)置手機(jī)號entity.setMobile(merchantDTO.getMobile());//...//保存商戶信息merchantMapper.insert(entity);//將新增商戶的id回寫到merchantDTOmerchantDTO.setId(entity.getId());return merchantDTO; }上邊代碼的問題是:由merchantDTO轉(zhuǎn)成entity實(shí)現(xiàn)過程繁瑣。
MapStruct是一個代碼生成器,它基于約定優(yōu)于配置的方法大大簡化了Java Bean對象之間的映射轉(zhuǎn)換的實(shí)現(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注解快速實(shí)現(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){//校驗(yàn)驗(yàn)證碼smsService.verificationMessageCode(merchantRegister.getVerifiykey(),merchantRegister.getVerifiyCode());//注冊商戶MerchantDTO merchantDTO = MerchantRegisterConvert.INSTANCE.vo2dto(merchantRegister);merchantService.createMerchant(merchantDTO);return merchantRegister; }?
總結(jié)
以上是生活随笔為你收集整理的MapStruct解决数据传输对象转换的繁琐的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。