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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dto转化 vo_微服务篇-DTO、VO快速转换解决方案

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dto转化 vo_微服务篇-DTO、VO快速转换解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇文章中介紹了一下什么是PO、BO、VO、DTO,以及在服務中的使用明亮:微服務篇-淺析VO、BO、 PO、 DTO?zhuanlan.zhihu.com

服務之間定義不同的POJO是為了解耦,減少維護工作量,不過pojo之間的轉換也是一個很大的工作量,工作量大在哪里呢?1、分層并將pojo分類后,pojo的數量是原來的n倍,pojo屬性調整,需修改get和set方法,會是很繁瑣的重復工作

2、pojo間轉換,兩個不同pojo需要定義轉換方法,pojo的轉換要定義不大量同的方法,pojo屬性有變動,會連鎖修改一堆的方法。

原來是為了減輕工作量,現在看來反而增加了不少工作,那怎么解決呢?我的方案是dozer + lombok

用lombok來省略get和set方法

通過dozer來實現不同pojo的轉換工作

那具體怎么做呢?(接下來的內容,手動實踐一下效果會比較好)

一、lombok的使用

首先創建一個maven項目,引入lombok,如下

org.projectlombok

lombok

1.18.8

然后給idea安裝lombok插件,如下圖

現在讓我們創建一個user類型,包含 id,name,age三個屬性,通常的寫法是這樣的

public class User {

private long id;

private String name;

private int age;

public long getId() {

return id;

}

public void setId(long id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

現在可以這么寫了

@Data

public class User {

private long id;

private String name;

private int age;

}

是不是很簡單啊,感覺代碼量少了很多。如果感覺@Data太簡單暴力,也可以用@Getter和@Setter注解。

Lombok還有很多其他作用的注解@ToString 可以重寫String方法,通過of定義現實的字段

@NoArgsConstructor 可以生成無參數構造器

@AllArgsConstructor 生成帶所有參數的構造器

@RequiredArgsConstructor 生成有參數的構造器,參數需要用@NonNull注釋一下

還有很多用法,這里不做詳細的描述了,咱們現在只需要通過@Data或@Getter@Setter解決修改get和set方法的問題就可以了

那么接下來讓我們用dozer來解決類的轉換問題

二、dozer的使用

還是要先引入maven

net.sf.dozer

dozer

5.5.1

然后分別創建一個UserVo和UserDto,并對他們做轉換

首先讓兩個類的屬性名稱一樣,如下

@Data

public class UserVo {

private String name;

private int id;

}

@Data

public class UserDto {

private String name;

private int id;

}

接下來怎么轉換呢,代碼如下

Mapper dozerMapper = new DozerBeanMapper();

UserVo userVo = new UserVo();

userVo.setName("mg");

userVo.setId(10);

InUserDto userDto = dozerMapper.map(userVo,UserDto.class);

System.out.println(userDto.getName());

輸出結果為mg

UserVo轉換為UserDto,這是屬性完全相同的情況,不過通常屬性名稱都是不同的,那怎么辦呢

修改UserVo 為

@Data

public class UserVo {

private String sname;

private int sid;

}

修改UserDto為

@Data

public class UserDto {

@Mapping("sname")

private String name;

@Mapping("sid")

private int id;

}

在執行下剛寫的轉換函數,試試是否能成功轉換了

是不是很容易啊,這樣既能分別定義的VO、PO、DTO,又能快速完成開發工作了

最后需要注意下:

lombok這個插件雖然好用,不過外界他的褒貶不一,用和不用一直是熱門話題,有不少大佬不提倡使用lombok,不過我還是挺喜歡用的,實在太方便了。

更多好文章可以關注公眾號 MG驛站,聯系作者可后臺留言

相關文章

總結

以上是生活随笔為你收集整理的dto转化 vo_微服务篇-DTO、VO快速转换解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。