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);
}
相关推荐
jarreyer14 分钟前
python离线包安装方法总结
开发语言·python
李辰洋16 分钟前
go tools安装
开发语言·后端·golang
Code_Geo17 分钟前
agent设计模式:第三章节—并行化
java·设计模式·agent·并行化
Javatutouhouduan21 分钟前
2025Java高质量面试真题汇总!
java·高并发·java面试·java面试题·后端开发·java架构师·java八股文
wanfeng_0921 分钟前
go lang
开发语言·后端·golang
绛洞花主敏明24 分钟前
go build -tags的其他用法
开发语言·后端·golang
ByteCraze28 分钟前
秋招被问到的常见问题
开发语言·javascript·原型模式
码银32 分钟前
【python】基于 生活方式与健康数据预测数据集(Lifestyle and Health Risk Prediction)的可视化练习,附数据集源文件。
开发语言·python·生活
Pluchon33 分钟前
硅基计划5.0 MySQL 叁 E-R关系图&联合/多表查询&三大连接&子查询&合并查询
开发语言·数据库·学习·mysql
kyle~40 分钟前
C++---嵌套类型(Nested Types)封装与泛型的基石
开发语言·c++·算法