对象复制工具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);
相关推荐
Wang's Blog几秒前
Java 项目部署之 Docker工具快速入门: 自定义镜像的分层结构与写时复制
java·开发语言·docker
高频因子挖掘机15 分钟前
多股票 K 线如何用 Pandas 对齐?从收益率计算到横截面分析
后端·github·api
WeiXin_DZbishe8 小时前
基于springboot宠物领养系统-计算机毕设 附源码【课程设计】94217
vue.js·spring boot·python·django·php·课程设计
kimnoic9 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
架构技术专栏9 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
vx_bisheyuange9 小时前
基于SpringBoot的体育商品推荐系统
spring boot·毕业设计
别动我齐刘海9 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
码事漫谈9 小时前
你让AI干的活,它可能只干了十分之一——而你根本看不出来
后端
必须得开心呀10 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
Wx-bishekaifayuan10 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游