Java实体类之间的转换

一.为什么要转换实体类

通常在后端开发中经常不直接返回实体Entity类,经过处理转换返回前端,前端提交过来的对象也需要经过转换Entity实体才做存储。

二.怎么转换

使用的BeanUtils.copyProperties方法虽然可以实现转换,但是比较粗暴,不仅效率低下(使用反射)而且仅映射相同名的属性,多数情况下还需要手动编写对应的转换方法实现。插件MapStruct 以接口方法结合注解优雅实现对象转换,MapStruct生成器生成代码以更贴近原生的Setter、Getter方法处理属性映射更为高效。

三.MapStruct的使用

如下示例:

实体类User:

java 复制代码
@Data
@AllArgsConstructor
public class User {
    private int id;
    private String name;
    private int age;
    private String address;
}

转换后的类UserVO:

java 复制代码
@Data
public class UserVO {
    private String userName;
    private int age;
}

转换接口:

java 复制代码
@Mapper
public interface UserConvert {
    UserConvert INSTANCE = Mappers.getMapper(UserConvert.class);
    @Mapping(source = "name", target = "userName")
    UserVO toVO(User entity);
}

使用方法:

java 复制代码
@Test
public void contextLoads() {
    User user = new User(0, "Test", 1, "成都高新区");
    UserVO userVO = UserConvert.INSTANCE.toVO(user);
}

如果有多个字段需要转换的话,使用@mappings注解,如下:

java 复制代码
@Mapper
public interface UserConvert {
    UserConvert INSTANCE = Mappers.getMapper(UserConvert.class);
    @Mappings({
            @Mapping(source = "name", target = "userName"),
            @Mapping(target = "age", target = "age")")
    })
    UserVO toVO(User entity);
}
相关推荐
考琪1 小时前
Nginx打印变量到log方法
java·运维·nginx
薛定谔的猫喵喵1 小时前
基于PyQt5的视频答题竞赛系统设计与实现
开发语言·qt·音视频
岱宗夫up1 小时前
Python 数据分析入门
开发语言·python·数据分析
wangjialelele1 小时前
Linux中的进程管理
java·linux·服务器·c语言·c++·个人开发
码界筑梦坊1 小时前
325-基于Python的校园卡消费行为数据可视化分析系统
开发语言·python·信息可视化·django·毕业设计
历程里程碑1 小时前
普通数组----轮转数组
java·数据结构·c++·算法·spring·leetcode·eclipse
多恩Stone1 小时前
【RoPE】Flux 中的 Image Tokenization
开发语言·人工智能·python
李日灐1 小时前
C++进阶必备:红黑树从 0 到 1: 手撕底层,带你搞懂平衡二叉树的平衡逻辑与黑高检验
开发语言·数据结构·c++·后端·面试·红黑树·自平衡二叉搜索树
晔子yy1 小时前
如何设计让你的程序同时处理10w条数据
java
Risehuxyc1 小时前
备份三个PHP程序
android·开发语言·php