对象复制工具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);
相关推荐
Jin、yz7 分钟前
JAVA 八股
java·开发语言
无心水18 分钟前
【任务调度:框架】11、分布式任务调度进阶:高可用、幂等性、性能优化三板斧
人工智能·分布式·后端·性能优化·架构·2025博客之星·分布式调度框架
va学弟18 分钟前
Java 网络通信编程(6):视频通话
java·服务器·网络·音视频
我是唐青枫20 分钟前
C#.NET Span 深入解析:零拷贝内存切片与高性能实战
开发语言·c#·.net
pjw1988090325 分钟前
Spring Framework 中文官方文档
java·后端·spring
lxh011328 分钟前
数据流的中位数
开发语言·前端·javascript
盒马盒马36 分钟前
Rust:迭代器
开发语言·后端·rust
jgyzl1 小时前
2026.3.11MyBatis-Plus基本使用与思考
java·数据库·mybatis
fu15935745681 小时前
sealos部署Java后端(若依为例)
spring boot
Full Stack Developme2 小时前
Java 常用通信协议及对应的框架
java·开发语言