一、序言
在實際專案開發程序中,總有資料物體類互相轉換的需求,DO、BO、VO、DTO等資料模型轉換經常發生,今天推薦幾個好用的物體類轉換工具,分別是EntityUtils MapStruct BeanCopier ,并且給出使用的案例,需要說明的是,本文有配套視頻講解,
下面分別講解這3種工具的使用,
二、實戰編碼
(一)EntityUtils
1、引入依賴
學習工具包源代碼的朋友,請看這里,
<!--EntityUtils工具類包-->
<dependency>
<groupId>xin.altitude.cms</groupId>
<artifactId>ucode-cms-common</artifactId>
<version>1.5.8</version>
</dependency>
2、DO
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "https://www.cnblogs.com/javazhishitupu/p/tb_user")
public class User {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
private Long userId;
private String userName;
private Integer age;
private Long deptId;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime gmtCreate;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime gmtModified;
public User(User user) {
if (Objects.nonNull(user)) {
this.userId = user.userId;
this.userName = user.userName;
this.age = user.age;
this.deptId = user.deptId;
this.gmtCreate = user.gmtCreate;
this.gmtModified = user.gmtModified;
}
}
}
3、VO
@Data
@NoArgsConstructor
public class UserVo extends User {
private String deptName;
private String tel;
/**
* 原生構造器來實作 DO 轉 VO
*
* @param user
*/
public UserVo(User user) {
super(user);
}
}
4、轉換
public List<UserVo> selectUserList1() {
List<User> userList = this.list();
// 一行代碼完成物體類轉換
List<UserVo> userVoList = EntityUtils.toList(userList, UserVo::new);
return userVoList;
}
說明一下,使用EntityUtils工具類最主要的是處理DO、VO等資料類構造器,
(二)MapStruct
1、引入依賴
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.3.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.3.Final</version>
</dependency>
2、DO和VO
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "https://www.cnblogs.com/javazhishitupu/p/tb_user")
public class User {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
private Long userId;
private String userName;
private Integer age;
private Long deptId;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime gmtCreate;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime gmtModified;
}
@Data
@NoArgsConstructor
public class UserVo extends User {
private String deptName;
private String tel;
}
3、MapStruct檔案
@org.mapstruct.Mapper
public interface UserMapStrcut {
UserVo toUserVo(User user);
List<UserVo> toUserVo(List<User> user);
}
4、轉換
public List<UserVo> selectUserList2() {
List<User> userList = this.list();
UserMapStrcut mapper = Mappers.getMapper(UserMapStrcut.class);
return mapper.toUserVo(userList);
}
(三)BeanCopier
BeanCopier在Spring體系下無額外依賴,DO和VO資料類同MapStruct部分,
轉換
public List<UserVo> selectUserList3() {
List<User> userList = this.list();
BeanCopier beanCopier = BeanCopier.create(User.class, UserVo.class, false);
List<UserVo> rs = new ArrayList<>();
for (User user : userList) {
UserVo userVo = new UserVo();
beanCopier.copy(user, userVo, null);
rs.add(userVo);
}
return rs;
}
三、小結
本文介紹的三種物體類轉換工具是非常高效的,相比于以反射為基礎的實作來說,性能相當出色,資料模型這塊在程式運行程序中會創建大量物件,因此既要考慮開發的靈活性,也要注重運行性能,
喜歡本文就【??推薦??】一下,激勵我持續創作,這個Github同樣精彩,收到您的star我會很激動,本文歸檔在專題博客,視頻講解在B站,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/538120.html
標籤:Java
