ruoyi属性拷贝工具

1.原先常年使用的Orika,但是现在的jdk版本为jdk11,因版本问题会报如下错误

Unable to make protected native java.lang.Object java.lang.Object.clone() throws java.lang.CloneNotSupportedException accessible: module java.base does not \"opens java.lang\" to unnamed module @36916eb0

 原因:Java 9 引入了模块系统(Jigsaw),并且默认情况下 java.base 模块对外部模块的访问是受限的。
Object.clone() 方法是 protected,而模块系统要求访问时显式打开模块,因此如果你的代码需要通过反射来访问这个方法,会遇到访问限制。

2.Orika工具已常年不维护,所以在次将属性拷贝工具替换为modelmapper

3.集成操作:

            
            
                org.modelmapper
                modelmapper
                3.2.2
            
package com.ruoyi.common.utils;

import org.modelmapper.ModelMapper;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * @author javachen
 * @description 对象拷贝工具类(基于 ModelMapper)
 */
@Component
public class ModelMapperUtils {

    private ModelMapper modelMapper;

    // 每个工具类实例使用独立的ModelMapper
    public ModelMapperUtils() {
        this.modelMapper = new ModelMapper();
    }

    /**
     * 将source对象转换为target类型对象
     */
    public  T convert(Object source, Class target) {
        return modelMapper.map(source, target);
    }

    /**
     * 将source列表转换为target列表
     */
    public  List convertList(Iterable source, Class target) {
        return ((List) source).stream()
                .map(item -> modelMapper.map(item, target))
                .collect(Collectors.toList());
    }

    /**
     * 将source集合转换为target集合
     */
    public  Set convertSet(Iterable source, Class target) {
        return ((Set) source).stream()
                .map(item -> modelMapper.map(item, target))
                .collect(Collectors.toSet());
    }
}
List list = tbDriverManagerService.selectTbDriverManagerList(tbDriverManager);
 
List resList = modelMapperUtils.convertList(list, TbDriverManagerVO.class); 

你可能感兴趣的:(java,ruoyi)