EntityUtils MapStruct BeanCopier 数据实体类转换工具 DO BO VO DTO 附视频
发布时间:2023-09-14 23:51:18 88
相关标签:
一、序言
在实际项目开发过程中,总有数据实体类互相转换的需求,DO、BO、VO、DTO等数据模型转换经常发生。今天推荐几个好用的实体类转换工具,分别是EntityUtils
MapStruct
BeanCopier
,并且给出使用的案例。需要说明的是,本文有配套视频讲解。
下面分别讲解这3种工具的使用。
二、实战编码
(一)EntityUtils
1、引入依赖
学习工具包源代码的朋友,请看这里。
xin.altitude.cms
ucode-cms-common
1.5.8
2、DO
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "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 selectUserList1() {
List userList = this.list();
// 一行代码完成实体类转换
List userVoList = EntityUtils.toList(userList, UserVo::new);
return userVoList;
}
说明一下,使用EntityUtils
工具类最主要的是处理DO、VO等数据类构造器。
(二)MapStruct
1、引入依赖
org.mapstruct
mapstruct
1.5.3.Final
org.mapstruct
mapstruct-processor
1.5.3.Final
2、DO和VO
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "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 toUserVo(List user);
}
4、转换
public List selectUserList2() {
List userList = this.list();
UserMapStrcut mapper = Mappers.getMapper(UserMapStrcut.class);
return mapper.toUserVo(userList);
}
(三)BeanCopier
BeanCopier
在Spring体系下无额外依赖,DO和VO数据类同MapStruct部分。
转换
public List selectUserList3() {
List userList = this.list();
BeanCopier beanCopier = BeanCopier.create(User.class, UserVo.class, false);
List rs = new ArrayList<>();
for (User user : userList) {
UserVo userVo = new UserVo();
beanCopier.copy(user, userVo, null);
rs.add(userVo);
}
return rs;
}
三、小结
本文介绍的三种实体类转换工具是非常高效的,相比于以反射为基础的实现来说,性能相当出色。数据模型这块在程序运行过程中会创建大量对象,因此既要考虑开发的灵活性,也要注重运行性能。
文章来源: https://blog.51cto.com/u_15495434/5880250
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报