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 $$
*/
@Slf4j
public 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);
}
}
BeanCopier 浅复制工具类
最新推荐文章于 2025-05-21 13:43:58 发布