日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java 類動態添加屬性字段的操作

瀏覽:30日期:2022-08-16 17:43:21
說明:

做項目中遇到一種場景,需要根據查詢時間段, 獲取時間段中中每個月份對應的金額(費用統計)。

如截圖中的兩列

Java 類動態添加屬性字段的操作

因為列是動態的, 首先想到的就是后天拼接JSON格式字符串, 然后返回到前臺, 組裝表頭及內容。

但是當前系統中easyUI版本為1.2,并不支持 data屬性(官方從1.3.2開始支持)。所以只能返回list<T> 格式。

網上一搜相關代碼很多, 看客可以自己搜索一下。 我這里記錄一下我當時使用場景及用法,已備以后使用。

1.需要引用cglib jar包, 我用的版本是2.2

2.建一個實體對象 DynamicBean.java 。主要用來處理對象。

public class DynamicBean { private Object object = null; // 動態生成的類 private BeanMap beanMap = null; // 存放屬性名稱以及屬性的類型 public DynamicBean() { super(); } public DynamicBean(Map propertyMap) { this.object = generateBean(propertyMap); this.beanMap = BeanMap.create(this.object); } /** * @param propertyMap * @return */ private Object generateBean(Map propertyMap) { BeanGenerator generator = new BeanGenerator(); Set keySet = propertyMap.keySet(); for (Iterator<String> i = keySet.iterator(); i.hasNext();) { String key = (String) i.next(); generator.addProperty(key, (Class) propertyMap.get(key)); } return generator.create(); } /** * ��bean���Ը�ֵ * @param property ������ * @param value ֵ */ public void setValue(Object property, Object value) { beanMap.put(property, value); } /** * ͨ���������õ�����ֵ * @param property ������ * @return ֵ */ public Object getValue(String property) { return beanMap.get(property); } /** * 返回新生成的對象 * @return */ public Object getObject() { return this.object; }}

3. 原來對象, 及需要拼接到對象中的屬性字段集合處理方法。

/***參數說明:* object : 查詢結果數組中對象。* moneyMap : 為對象對應所有月份數據集合* 解釋:已經查詢出一組賬單對象集合List<Bill> , 而moneyMap為對象中的一個屬性 * Map<String,Bigdecimal>, 存放了月份及金額*/private Object dynamicClass(Object object, Map<String, BigDecimal> moneyMap) throws Exception { // 字段 - 值 集合 HashMap<String, Object> returnMap = new HashMap<String, Object>(); // 字段 - 字段類型 集合 HashMap<String, Object> typeMap = new HashMap<String, Object>(); // 獲取傳入類 Class<? extends Object> type = object.getClass(); BeanInfo beanInfo = Introspector.getBeanInfo(type); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); // 獲取對象中已存在的數據 for (int i = 0; i < propertyDescriptors.length; i++) { PropertyDescriptor descriptor = propertyDescriptors[i]; String propertyName = descriptor.getName(); if (!propertyName.equals('class') && !propertyName.equals('monthMap')) { Method readMethod = descriptor.getReadMethod(); Object result = readMethod.invoke(object, new Object[0]); if (result != null) { returnMap.put(propertyName, result); } else { String propertyType = descriptor.getPropertyType().toString(); if (propertyType.contains('java.math.BigDecimal')) { returnMap.put(propertyName, new BigDecimal(0)); } else { returnMap.put(propertyName, ''); } } typeMap.put(propertyName, descriptor.getPropertyType()); } } // 獲取月份數據, 變為字段屬性 Set<String> monthKeys = moneyMap.keySet(); for (Iterator<String> it = monthKeys.iterator(); it.hasNext();) { String key = (String) it.next(); // 字段類型 typeMap.put(key, Class.forName('java.math.BigDecimal')); // 字段對應值 returnMap.put(key, moneyMap.get(key)); } // map轉換成實體對象 DynamicBean bean = new DynamicBean(typeMap); // 賦值 Set<String> keys = typeMap.keySet(); for (Iterator<String> it = keys.iterator(); it.hasNext();) { String key = (String) it.next(); bean.setValue(key, returnMap.get(key)); } Object obj = bean.getObject(); return obj; }

做筆記使用, 說不定以后還會用到。

補充:java動態的生成類的屬性、并賦值

1、springboot項目中,在build.gradle中,配置jar包

compile('commons-beanutils:commons-beanutils:1.9.3')compile('cglib:cglib-nodep:3.2.4')

2、創建DynamicBean

import java.util.Map; import net.sf.cglib.beans.BeanGenerator;import net.sf.cglib.beans.BeanMap; public class DynamicBean { /** * 目標對象 */ private Object target; /** * 屬性集合 */ private BeanMap beanMap; public DynamicBean(Class superclass, Map<String, Class> propertyMap){ this.target = generateBean(superclass, propertyMap); this.beanMap = BeanMap.create(this.target); } /** * bean 添加屬性和值 * * @param property * @param value */ public void setValue(String property, Object value) { beanMap.put(property, value); } /** * 獲取屬性值 * * @param property * @return */ public Object getValue(String property) { return beanMap.get(property); } /** * 獲取對象 * * @return */ public Object getTarget() { return this.target; } /** * 根據屬性生成對象 * * @param superclass * @param propertyMap * @return */ private Object generateBean(Class superclass, Map<String, Class> propertyMap) { BeanGenerator generator = new BeanGenerator(); if (null != superclass) { generator.setSuperclass(superclass); } BeanGenerator.addProperties(generator, propertyMap); return generator.create(); }}

3、創建ReflecUtil轉換的工具類

import java.beans.PropertyDescriptor;import java.util.HashMap;import java.util.Map; import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger; import org.apache.commons.beanutils.PropertyUtilsBean; import com.sunxung.factoring.entity.DynamicBean;import com.sunxung.factoring.entity.attendanceManagement.AttendanceVo; /** * @className:ReflectUtil * @description:動態生成類的屬性、并且賦值 * @date:2018年4月3日 下午2:33:10 */public class ReflectUtil { static Logger logger = LogManager.getLogger(ReflectUtil.class); @SuppressWarnings('rawtypes') public static Object getTarget(Object dest, Map<String, Object> addProperties) { PropertyUtilsBean propertyUtilsBean = new PropertyUtilsBean(); PropertyDescriptor[] descriptors = propertyUtilsBean.getPropertyDescriptors(dest); Map<String, Class> propertyMap = new HashMap<>(); for (PropertyDescriptor d : descriptors) { if (!'class'.equalsIgnoreCase(d.getName())) { propertyMap.put(d.getName(), d.getPropertyType()); } } // add extra properties addProperties.forEach((k, v) -> propertyMap.put(k, v.getClass())); // new dynamic bean DynamicBean dynamicBean = new DynamicBean(dest.getClass(), propertyMap); // add old value propertyMap.forEach((k, v) -> { try { // filter extra properties if (!addProperties.containsKey(k)) { dynamicBean.setValue(k, propertyUtilsBean.getNestedProperty(dest, k)); } } catch (Exception e) { logger.error(e.getMessage(), e); } }); // add extra value addProperties.forEach((k, v) -> { try { dynamicBean.setValue(k, v); } catch (Exception e) { logger.error(e.getMessage(), e); } }); Object target = dynamicBean.getTarget(); return target; } public static void main(String[] args) { AttendanceVo entity = new AttendanceVo(); Map<String, Object> addProperties = new HashMap<>(); addProperties.put('day31', '你好'); AttendanceVo newVo = (AttendanceVo) getTarget(entity, addProperties); System.out.println(newVo.getDay0()); }}

4、在項目中動態生成屬性并且賦值的使用

private AttendanceVo autoDetailNew(SearchAttendanceVo search, AttendanceVo att) { search.setDingdingUserId(att.getDingdingUserId()); List<Attendance> detailList = attendanceMapper.findDetailList(search); Map<String, Object> addProperties = new HashMap<>(); for (Attendance attendance : detailList) { addProperties.put('day' + DateUtil.getDayStringFormatYMD(attendance.getAttendanceDate()), attendance.getRemark()); } AttendanceVo newVo = (AttendanceVo) ReflectUtil.getTarget(att, addProperties); return newVo; }

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
免费一级欧美在线观看视频| 国产日韩1区| 久久免费高清| 日韩中文字幕亚洲一区二区va在线 | 欧美日韩伊人| 欧美国产不卡| 精品伊人久久久| 日韩一区二区三区免费播放| 美女视频免费精品| 免费看av不卡| 最近高清中文在线字幕在线观看1| 都市激情国产精品| sm捆绑调教国产免费网站在线观看| 日韩中文影院| 在线国产一区| 欧美影院三区| 亚洲精品第一| 麻豆成人91精品二区三区| 国产v日韩v欧美v| 亚洲欧美激情诱惑| 日日夜夜免费精品视频| 精品一区二区三区亚洲| 欧美va天堂在线| 日韩黄色免费网站| 天堂√中文最新版在线| 噜噜噜躁狠狠躁狠狠精品视频| 欧美在线看片| 蜜桃精品在线| 日韩动漫一区| 久久一区二区三区电影| 午夜国产一区二区| 国产精品传媒麻豆hd| 久久久久国产精品一区三寸| 中文字幕亚洲在线观看| 精品成人18| 中文字幕一区二区精品区| 美女精品一区二区| 亚洲欧美日韩一区在线观看| 精品国产亚洲一区二区三区大结局 | 国产精品嫩模av在线| 99精品视频精品精品视频| 日本国产一区| 国产传媒av在线| 亚洲精品国产精品粉嫩| 日韩专区精品| 欧美偷窥清纯综合图区| 亚洲欧美伊人| 国产精品久久久久久久免费观看 | 日韩精品一级中文字幕精品视频免费观看 | 日韩精品免费一区二区三区| 97成人超碰| 国精品一区二区三区| 国产精品v日韩精品v欧美精品网站| 国产精品a级| 美女91精品| 91亚洲国产成人久久精品| 日本一区二区中文字幕| 成人片免费看| 国产黄色精品| 日韩在线观看中文字幕| 亚洲一级黄色| 国产精品成久久久久| 日韩黄色在线观看| 国产亚洲亚洲| 在线日韩中文| 在线一区视频观看| 国产一区二区三区四区五区传媒| 日韩精品一区二区三区中文| 国产亚洲综合精品| 欧美色图一区| 亚洲电影有码| 精品不卡一区| 日韩av一级片| 日韩毛片一区| 日本中文字幕一区二区| 综合激情婷婷| 日韩影院在线观看| 99在线|亚洲一区二区| 亚洲91久久| 日韩一区亚洲二区| 91精品xxx在线观看| 理论片午夜视频在线观看| 欧美精品不卡| 国产黄色精品| 你懂的国产精品| 久久一区欧美| 国产一区二区三区四区大秀| 久久狠狠久久| 国产精品中文| 久久97视频| 成人午夜在线| 国产精品福利在线观看播放| 国产成人免费| 婷婷激情一区| 欧美肉体xxxx裸体137大胆| 91精品蜜臀一区二区三区在线| 日韩影院二区| 免费av一区| 伊人久久一区| 国产亚洲久久| 国产免费播放一区二区| 欧美国产另类| 免费一级欧美片在线观看网站 | 麻豆网站免费在线观看| 不卡一二三区| 国产综合欧美| 精品国产一区二区三区噜噜噜| 免费视频一区二区三区在线观看| 国产日韩一区二区三区在线播放| 国产精品www.| 日韩在线观看不卡| 国产欧美日韩影院| 国产精品网站在线看| 狠狠久久伊人中文字幕| 日韩中文在线电影| av不卡在线看| 国产色99精品9i| 日韩大片免费观看| 久久99伊人| 国产极品久久久久久久久波多结野| 国产中文欧美日韩在线| 久久激情网站| 日本在线成人| 成人污污视频| 91久久午夜| 国产精品对白| 午夜国产一区二区| 亚洲精品乱码| 日产午夜精品一线二线三线| 欧美a级一区| 欧美一区91| 欧美日韩尤物久久| 亚洲免费福利一区| 福利在线一区| 久久99伊人| 精品国产中文字幕第一页| 欧美大黑bbbbbbbbb在线| 日韩精品久久久久久久软件91| 美日韩一区二区三区| 伊人精品一区| 国产日韩欧美一区二区三区| 亚洲黄色中文字幕| 久久香蕉精品| 国产成年精品| 日韩在线一区二区| 久久电影tv| 日韩高清一区二区| 国产尤物精品| 国产精品videossex| 国产专区一区| 国产精品一区二区精品| 蜜桃tv一区二区三区| 久久av国产紧身裤| 丝袜亚洲精品中文字幕一区| 欧美黄色一区二区| 亚洲自啪免费| 国产美女高潮在线观看| 三级欧美在线一区| 亚洲播播91| 国产欧美精品久久| 亚洲综合二区| 日韩欧美看国产| 91九色综合| 香蕉成人久久| 神马日本精品| 免费一区二区三区在线视频| 在线日韩成人| 欧美日韩国产综合网| 国产一区福利| 国产日韩欧美一区二区三区| 男人天堂欧美日韩| 亚洲特级毛片| 久久精品福利| 日本午夜精品久久久久| 日韩午夜一区| 99热国内精品| 精品视频99| 欧美日韩调教| 亚洲精品激情| 日韩中文字幕区一区有砖一区| 色婷婷精品视频| 高清一区二区三区av| 国产日韩视频在线| 亚洲精品一级| 一本一道久久a久久| 欧美天堂亚洲电影院在线观看| 国产一区国产二区国产三区| 日韩一区二区三免费高清在线观看 | 久久九九精品| 国产精品伦理久久久久久| 国产精品对白| 国产精品亚洲综合在线观看| 蜜桃视频第一区免费观看| 激情欧美国产欧美| 91精品一区二区三区综合| zzzwww在线看片免费| 黄色欧美在线| 日韩88av| 日韩中文字幕高清在线观看| 久久只有精品|