对象复制工具Orika,快速实现两个java对象的属性赋值

一、maven依赖引入orika

bash 复制代码
		<dependency>
            <groupId>ma.glasnost.orika</groupId>
            <artifactId>orika-core</artifactId>
            <version>1.5.4</version>
        </dependency>

二、Orika工具类

java 复制代码
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.impl.DefaultMapperFactory;
import ma.glasnost.orika.metadata.TypeFactory;
import java.util.List;

public class BeanMapperUtil {

    /**
     * Mapper factory
     */
    private static final MapperFactory NOT_NULL_MAPPER_FACTORY = new DefaultMapperFactory.Builder().mapNulls(false).build();


    private BeanMapperUtil() {

    }

    /**
     * Map object
     *
     * @param source           source
     * @param destinationClass targetClass
     * @return object or null
     */
    public static <S, D> D map(S source, Class<D> destinationClass) {
        return NOT_NULL_MAPPER_FACTORY.getMapperFacade().map(source, destinationClass);
    }

    /**
     * Map list
     *
     * @param sourceList       sourceList
     * @param sourceClass      sourceClass
     * @param destinationClass destinationClass
     * @return List
     */
    public static <S, D> List<D> mapList(Iterable<S> sourceList, Class<S> sourceClass, Class<D> destinationClass) {
        return NOT_NULL_MAPPER_FACTORY.getMapperFacade().mapAsList(sourceList, TypeFactory.valueOf(sourceClass), TypeFactory.valueOf(destinationClass));
    }
}

三、使用示例

准备工作,定义两个对象:

java 复制代码
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    public static class User {
        private String name;
        private Integer age;
    }


    @ApiModel
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    public static class UserDTO {
        @ApiModelProperty("姓名")
        private String name;

        @ApiModelProperty("年龄")
        private Integer age;
    }

1、单个对象之间

java 复制代码
User user = new User("张三", 18);
//user对象:BeanMapperUtil.User(name=张三, age=18)
System.out.println("user对象:" + user);

UserDTO userDTO = BeanMapperUtil.map(user, UserDTO.class);
//userDTO对象:BeanMapperUtil.UserDTO(name=张三, age=18)
System.out.println("userDTO对象:" + userDTO);

2、对象集合之间

java 复制代码
        List<User> userList  = Lists.newArrayList();
        userList.add(new User("张三", 10));
        userList.add(new User("李四", 12));
        
        // userList对象:[BeanMapperUtil.User(name=张三, age=10), BeanMapperUtil.User(name=李四, age=12)]
        System.out.println("userList对象:" + userList);

        List<UserDTO> userDTOList = BeanMapperUtil.mapList(userList, User.class, UserDTO.class);
       
        //userDTOList对象:[BeanMapperUtil.UserDTO(name=张三, age=10), BeanMapperUtil.UserDTO(name=李四, age=12)]
        System.out.println("userDTOList对象:" + userDTOList);
相关推荐
无限进步_几秒前
【C++】电话号码的字母组合:从有限处理到通用解法
开发语言·c++·ide·windows·git·github·visual studio
宸津-代码粉碎机1 分钟前
Spring Boot 4.0虚拟线程实战调优技巧,最大化发挥并发优势
java·人工智能·spring boot·后端·python
MaCa .BaKa4 分钟前
47-心里健康咨询平台/心理咨询系统
java·spring boot·mysql·tomcat·maven·intellij-idea·个人开发
JJay.15 分钟前
Android Kotlin 协程使用指南
android·开发语言·kotlin
csbysj202021 分钟前
jQuery 捕获详解
开发语言
木子欢儿22 分钟前
Docker Hub 镜像发布指南
java·spring cloud·docker·容器·eureka
C++ 老炮儿的技术栈30 分钟前
GCC编译时无法向/tmp 目录写入临时汇编文件,因为设备空间不足,解决
linux·运维·开发语言·汇编·c++·git·qt
Devin~Y33 分钟前
高并发电商与AI智能客服场景下的Java面试实战:从Spring Boot到RAG与向量数据库落地
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
蜡台38 分钟前
IDEA 一些 使用配置和插件
java·ide·intellij-idea
小码哥_常38 分钟前
一个Starter搞定六种防护,Spring Boot API的超强护盾来了
后端