All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.hugh.util.EntityUtils Maven / Gradle / Ivy

There is a newer version: 2.7.14
Show newest version
package com.github.hugh.util;

import com.esotericsoftware.kryo.Kryo;
import com.github.hugh.support.EntityUtilsCallBack;
import com.github.hugh.support.instance.Instance;
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

/**
 * 实体操作工具类
 *
 * @author hugh
 * @since 1.2.0
 */
public class EntityUtils {

    /**
     * 实现两个实体类属性之间的复制
     *
     * @param     实体类型
     * @param source 源文
     * @param dest   复制目标
     */
    public static  void copy(T source, T dest) {
        BeanUtils.copyProperties(source, dest);
    }

    /**
     * 实现两个实体类属性之间的复制
     *
     * @param     源
     * @param     目标
     * @param source 源文
     * @param target 复制目标
     * @return T 目标实体类
     * @since 2.1.13
     */
    public static  T copy(S source, Supplier target) {
        return copy(source, target, (String[]) null);
    }

    /**
     * 实现两个实体类属性之间的复制
     *
     * @param               源
     * @param               目标
     * @param source           源文
     * @param target           复制目标
     * @param ignoreProperties 需要忽略的属性
     * @return T 目标实体类
     * @since 2.1.13
     */
    public static  T copy(S source, Supplier target, String... ignoreProperties) {
        return copy(source, target, null, ignoreProperties);
    }

    /**
     * 实现两个实体类属性之间的复制,并支持赋值后结果处理
     *
     * @param source   源
     * @param target   目标
     * @param callBack 回调方法,属性复制完成后进行调用
     * @param       源
     * @param       目标
     * @return T 目标实体类
     * @since 2.2.4
     */
    public static  T copy(S source, Supplier target, EntityUtilsCallBack callBack) {
        return copy(source, target, callBack, (String[]) null);
    }

    /**
     * 实现两个实体类属性之间的复制,并支持赋值后结果处理与忽略字段
     *
     * @param source           源
     * @param target           目标
     * @param callBack         回调方法,属性复制完成后进行调用
     * @param ignoreProperties 需要忽略的属性
     * @param               源
     * @param               目标
     * @return T 目标实体类
     * @since 2.2.4
     */
    public static  T copy(S source, Supplier target, EntityUtilsCallBack callBack, String... ignoreProperties) {
        T t = target.get();
        BeanUtils.copyProperties(source, t, ignoreProperties);
        if (callBack != null) {
            // 回调
            callBack.callBack(source, t);
        }
        return t;
    }

    /**
     * 通过Kryo框架深拷贝
     *
     * @param     实体类型
     * @param source 拷贝对象
     * @return T 实体对象
     */
    public static  T deepClone(T source) {
        return Instance.getInstance().singleton(Kryo.class).copy(source);
    }

    /**
     * 复制list 集合属性
     *
     * @param      目标对象类型
     * @param      源-对象类型
     * @param sources 源
     * @param target  目标类
     * @return List
     * @since 2.1.12
     */
    public static  List copyListProperties(List sources, Supplier target) {
        return copyListProperties(sources, target, null);
    }

    /**
     * 复制list集合
     * 

* 使用场景:Entity、Bo、Vo层数据的复制,因为BeanUtils.copyProperties只能给目标对象的属性赋值,却不能在List集合下循环赋值,因此添加该方法 * 如:{@code List }赋值到 {@code List} ,{@code List}中的 AdminVo 属性都会被赋予到值 * S: 数据源类 ,T: 目标类::new(eg: AdminVo::new) * * @param 目标对象类型 * @param 源-对象类型 * @param sources 源 * @param target 目标类 * @param callBack 回调方法,属性复制完成后进行调用 * @return List 赋值后新的集合 * @since 2.1.12 */ public static List copyListProperties(List sources, Supplier target, EntityUtilsCallBack callBack) { return copyListProperties(sources, target, callBack, (String[]) null); } /** * 复制list集合 *

* 使用场景:Entity、Bo、Vo层数据的复制,因为BeanUtils.copyProperties只能给目标对象的属性赋值,却不能在List集合下循环赋值,因此添加该方法 * 如:{@code List }赋值到 {@code List} ,{@code List}中的 AdminVo 属性都会被赋予到值 * S: 数据源类 ,T: 目标类::new(eg: AdminVo::new) * * @param 目标对象类型 * @param 源-对象类型 * @param sources 源 * @param target 目标类 * @param callBack 回调方法,属性复制完成后进行调用 * @param ignoreProperties 需要忽略的属性 * @return List 赋值后新的集合 * @since 2.1.13 */ public static List copyListProperties(List sources, Supplier target, EntityUtilsCallBack callBack, String... ignoreProperties) { List list = new ArrayList<>(sources.size()); for (S source : sources) { T t = target.get(); BeanUtils.copyProperties(source, t, ignoreProperties); if (callBack != null) { // 回调 callBack.callBack(source, t); } list.add(t); } return list; } }