BeanCopier 浅复制工具类

来源:互联网 发布:linux history删除指定 编辑:程序博客网 时间:2024/05/16 10:33
package com.bestpay.messagecenter.oss.service;/** * Created by lxn on 2016/11/2. */import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;import lombok.extern.slf4j.Slf4j;import net.sf.cglib.beans.BeanCopier;import com.bestpay.messagecenter.oss.dal.model.TSysRole;import com.bestpay.messagecenter.oss.dal.model.TSysUser;import com.bestpay.messagecenter.oss.service.model.dataEntity.UserVo;import com.github.miemiedev.mybatis.paginator.domain.PageList;/** * VoPo 转换工具(浅复制) * @author lxn * @version Id: VoPoUtil.java, v 0.1 2016/11/2 14:41 lxn Exp $$ */@Slf4jpublic class PojoConvertUtil {    private static Lock initLock =new ReentrantLock();    private static Map<String,BeanCopier> beanCopierMap =new HashMap<String,BeanCopier>();    /**     * 初始化 BeanCopier     * @param source     * @param target     * @return     */    private static BeanCopier initCopier(Class source,Class target){        initLock.lock();        BeanCopier find = beanCopierMap.get(source.getName()+"_"+target.getName());        if(find!=null){            initLock.unlock();            return find;        }        BeanCopier beanCopier = BeanCopier.create(source,target,false);        beanCopierMap.put(source.getName()+"_"+target.getName(),beanCopier);        initLock.unlock();        return beanCopier;    }    /**     * 获取BeanCopier     * @param source     * @param target     * @return     */    private static  BeanCopier getBeanCopier(Class source,Class target){        BeanCopier beanCopier = beanCopierMap.get(source.getClass().getName()+"_"+target.getName());        if(beanCopier!=null){            return beanCopier;        }        return initCopier(source,target);    }    /**     * Pojo 类型转换(浅复制,字段名&类型相同则被复制)     * @param source     * @param targetClass     * @param <T>     * @return     */    public static <T> T convert(Object source, Class<T> targetClass){        if(source==null){            return null;        }        BeanCopier beanCopier = getBeanCopier(source.getClass(),targetClass);        try {            T target = targetClass.newInstance();            beanCopier.copy(source,target,null);            return target;        }catch (Exception e){            log.error("对象拷贝失败,{}",e);            throw new RuntimeException("对象拷贝失败"+source+"_"+targetClass);        }    }    /**     * Pojo 类型转换(浅复制,字段名&类型相同则被复制)     * @param source     * @param targetClass     * @param <E>     * @return     */    public static <E> List<E> convert(List source, Class<E> targetClass){        if(source==null){            return null;        }        try {            if(source.isEmpty()){                return source.getClass().newInstance();            }            List result = source.getClass().newInstance();            for(Object each: source){                result.add(convert(each,targetClass));            }            return result;        }catch (Exception e){            log.error("对象拷贝失败,{}",e);            throw new RuntimeException("对象拷贝失败"+source+"_"+targetClass);        }    }    /**     * Pojo 类型转换(浅复制,字段名&类型相同则被复制)     * @param source     * @param targetClass     * @param <T>     * @return     */    public static <T> PageList<T> convert(PageList source,Class<T> targetClass){        if(source==null){            return null;        }        List<T> list  = convert((List)source,targetClass);        PageList<T> result = new PageList<>(source.getPaginator());        result.addAll(list);        return result;    }    public static void main(String[] args) {        TSysRole tSysRole =new TSysRole();        tSysRole.setRoleDesc("12346");        tSysRole.setRoleName("adcasdasd");        tSysRole.setRoleId(187);////        RoleVo result = PojoConvertUtil.convert(tSysRole, RoleVo.class);//        List<TSysRole> org =  new ArrayList<>();//        org.add(tSysRole);        TSysUser tSysUser =new TSysUser();        tSysUser.setRole(tSysRole);        UserVo tar = PojoConvertUtil.convert(tSysUser,UserVo.class);        System.out.println(tar);    }}

0 0
原创粉丝点击