123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- package cn.efunbox.manage.common.utils;
- import org.springframework.cglib.beans.BeanCopier;
- import org.springframework.cglib.beans.BeanMap;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.concurrent.ConcurrentHashMap;
- /**
- *
- * 对象操作工具
- *
- */
- public class BeanUtil {
- /**
- * 缓存BeanCopier对象,加快对象浅拷贝效率
- */
- private static final Map<String, BeanCopier> BEAN_COPIERS = new ConcurrentHashMap<>();
- /**
- * 缓存BeanMap对象,加快Map和javaBean对象的转化
- */
- private static final Map<String, BeanMap> BEAN_MAP = new ConcurrentHashMap<>();
- private BeanUtil(){};
-
- /**
- * 浅拷贝 只拷贝相同属性名和类型的
- *
- * @param srcObj
- * 被拷贝对象
- *
- * @param destObj
- * 拷贝对象
- *
- */
- public static void copy(Object srcObj, Object destObj) {
- if (srcObj == null || destObj == null) {
- return;
- }
- String key = srcObj.getClass().getName() + destObj.getClass().getName();
- BeanCopier copier = null;
- if (BEAN_COPIERS.get(key)==null) {
- synchronized (BeanUtil.class) {
- if(BEAN_COPIERS.get(key)==null){
- copier = BeanCopier.create(srcObj.getClass(), destObj.getClass(), false);
- BEAN_COPIERS.put(key, copier);
- }
- }
- } else {
- copier = BEAN_COPIERS.get(key);
- }
- copier.copy(srcObj, destObj, null);
- }
- /**
- * 对象转map
- * @param obj
- * @param fieldNames 需要存入的属性名 属性名之间以,分隔
- * @param <T>
- * @return
- */
- public static <T> Map<String, Object> getMapByField(T obj, String fieldNames) {
- Map<String, Object> map = new HashMap<String, Object>();
- if (obj == null || fieldNames == null) {
- return map;
- }
- BeanMap beanMap = null;
- beanMap=getBeanMap(obj);
- for (String f : fieldNames.split(",")) {
- map.put(f, beanMap.get(f));
- }
- return map;
- }
- /**
- * 对象转map
- * @param obj
- * @param removefieldNames 不需要存入的属性名 属性名之间以,分隔
- * @param <T>
- * @return
- */
- public static <T> Map<String, Object> getMapByRemoveField(T obj, String removefieldNames) {
- Map<String, Object> map = new HashMap<String, Object>();
- if (obj == null) {
- return map;
- }
- BeanMap beanMap = null;
- beanMap=getBeanMap(obj);
- for (Object key : beanMap.keySet()) {
- map.put(key + "", beanMap.get(key));
- }
- if(removefieldNames!=null){
- for(String key:removefieldNames.split(",")){
- map.remove(key);
- }
- }
- return map;
- }
- /**
- * 对象转map
- *
- * @param srcObj
- * @return
- */
- public static Map<String, Object> getMap(Object srcObj) {
- return getMapByRemoveField(srcObj, null);
- }
- /**
- * map转对象
- *
- * @param map
- * @param obj
- * 需要转换的空对象
- *
- * @return
- */
- public static <T> T mapToObj(Map<String, Object> map, T obj) {
- if (obj == null || map == null) {
- return null;
- }
- BeanMap beanMap = null;
- beanMap=getBeanMap(obj);
- beanMap.putAll(map);
- return obj;
- }
- /**
- * 对象集合转map集合
- *
- * @param objList
- * @return
- */
- public static <T> List<Map<String, Object>> objectsToMaps(List<T> objList) {
- List<Map<String, Object>> list = new ArrayList<>();
- if (objList != null && objList.size() > 0) {
- Map<String, Object> map = null;
- T obj = null;
- for (int i = 0, size = objList.size(); i < size; i++) {
- obj = objList.get(i);
- map = getMap(obj);
- list.add(map);
- }
- }
- return list;
- }
- /**
- * map集合转对象集合
- *
- * @param maps
- * @param clazz
- * 转换的对象class
- * @return
- */
- public static <T> List<T> mapsToObjects(List<Map<String, Object>> maps, Class<T> clazz) {
- List<T> list = new ArrayList<>();
- if (maps != null && maps.size() > 0) {
- Map<String, Object> map = null;
- T bean = null;
- try {
- for (int i = 0, size = maps.size(); i < size; i++) {
- map = maps.get(i);
- bean = clazz.newInstance();
- mapToObj(map, bean);
- list.add(bean);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return list;
- }
- private static BeanMap getBeanMap(Object obj){
- BeanMap beanMap=null;
- String key=obj.getClass().getName();
- if (BEAN_MAP.get(key)==null) {
- synchronized (BeanUtil.class) {
- if(BEAN_MAP.get(key)==null){
- beanMap = BeanMap.create(obj);
- BEAN_MAP.put(key, beanMap);
- }
- }
- } else {
- beanMap =BEAN_MAP.get(key);
- }
- return beanMap;
- }
- }
|