对象复制工具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);
相关推荐
2401_8370885034 分钟前
stringRedisTemplate.opsForHash().entries
java·redis
独隅41 分钟前
在 Lua 中,你可以使用 `os.date()` 函数轻松地将时间戳转换为格式化的时间字符串
开发语言·lua
思麟呀2 小时前
Linux的基础IO流
linux·运维·服务器·开发语言·c++
星释2 小时前
Rust 练习册 :Pythagorean Triplet与数学算法
开发语言·算法·rust
星释2 小时前
Rust 练习册 :Nth Prime与素数算法
开发语言·算法·rust
lkbhua莱克瓦242 小时前
Java基础——集合进阶3
java·开发语言·笔记
ruleslol2 小时前
SpringBoot面试题03-BeanFactory
spring boot
码事漫谈2 小时前
智能体颠覆教育行业调研报告:英语、编程、语文、数学学科应用分析
后端
蓝-萧2 小时前
使用Docker构建Node.js应用的详细指南
java·后端
多喝开水少熬夜3 小时前
Trie树相关算法题java实现
java·开发语言·算法