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 小时前
【C语言】 字符数组相关库函数
c语言·开发语言·算法
微风中的麦穗7 小时前
【MATLAB】MATLAB R2025a 详细下载安装图文指南:下一代科学计算与工程仿真平台
开发语言·matlab·开发工具·工程仿真·matlab r2025a·matlab r2025·科学计算与工程仿真
2601_949146537 小时前
C语言语音通知API示例代码:基于标准C的语音接口开发与底层调用实践
c语言·开发语言
开源技术8 小时前
Python Pillow 优化,打开和保存速度最快提高14倍
开发语言·python·pillow
学嵌入式的小杨同学8 小时前
从零打造 Linux 终端 MP3 播放器!用 C 语言实现音乐自由
linux·c语言·开发语言·前端·vscode·ci/cd·vim
毕设源码-朱学姐8 小时前
【开题答辩全过程】以 基于JavaWeb的网上家具商城设计与实现为例,包含答辩的问题和答案
java
mftang9 小时前
Python 字符串拼接成字节详解
开发语言·python
jasligea9 小时前
构建个人智能助手
开发语言·python·自然语言处理
kokunka10 小时前
【源码+注释】纯C++小游戏开发之射击小球游戏
开发语言·c++·游戏
C雨后彩虹10 小时前
CAS与其他并发方案的对比及面试常见问题
java·面试·cas·同步·异步·