EntityUtils MapStruct BeanCopier 数据实体类转换工具 DO BO VO DTO 附视频
source link: https://blog.51cto.com/u_15495434/5880250
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
EntityUtils MapStruct BeanCopier 数据实体类转换工具 DO BO VO DTO 附视频
精选 原创在实际项目开发过程中,总有数据实体类互相转换的需求,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>
@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;
}
}
}
@Data
@NoArgsConstructor
public class UserVo extends User {
private String deptName;
private String tel;
/**
* 原生构造器来实现 DO 转 VO
*
* @param user
*/
public UserVo(User user) {
super(user);
}
}
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 = "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);
}
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;
}
本文介绍的三种实体类转换工具是非常高效的,相比于以反射为基础的实现来说,性能相当出色。数据模型这块在程序运行过程中会创建大量对象,因此既要考虑开发的灵活性,也要注重运行性能。
- 赞
- 收藏
- 评论
- 分享
- 举报
Recommend
-
95
MapStruct is a pretty popular and well-maintained framework for object mapping. To summarize: it is capable of generating the mapping code among objects in different layers of an application.
-
40
摘要 当前web后端开发,都是使用多层工程结构,需要在VO,BO,DTO,DO等各种数据结构中相互转换。这些转换代码都是些比较简单的字段映射,类型转换,重复性工作比较高,可以使用一些工具解放我们的双手 技术方案 ...
-
25
-
24
本文介绍下Java对象属性复制组件(MapStruct),以及项目中引入遇到的坑。 1. 问题背景 日常编程中,经常会碰到对象属性复制的场景,就比如下面这样一个常见的三层MVC架构。
-
6
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。任何不保留此声明的转载都是抄袭。 这些年写Java写多了,感觉Java...
-
8
小工具推荐 Mock Bean对象生成工具:random-beansBean属性复制:MapStructJava代码检查工具:Checker Frameworkjava相关的工具库:vjtools(唯品会出品)1. Mock Bean对...
-
5
mapstruct 高级用法之userid转换为username November 30, 2020 6027 mapstruct的简单用法就不讲了,看完这篇文章能获得什么呢? 1.普通用法:将userId转换为userName?
-
8
对象转换工具 MapStruct 介绍 发表于 2021-08-08 | 分类于 Java , MapStr...
-
3
还在用BeanUtils拷贝对象?MapStruct才是王者!【附源码】 - 阿Q说代码的个人空间 - OSCHINA - 中文开源技术交流社区 前几天,远在北京的小伙伴在群里抛出了“MapStruct”的概念。对于只闻其名,未见其人的我来说,决定对其研究一番。本文我...
-
1
作者:京东物流 王北永 姚再毅 日常开发过程中,尤其在 DDD 过程中,经常遇到 VO/MODEL/PO 等领域模型的相互转换。此时我们会一个字段一个字段进行 set|get 设置。要么使用工具类进行暴力的属性拷贝,在这个暴力属性拷贝过程中好的工具更能...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK