1. 程式人生 > >發一波很6的程式碼 EntityUtils ,將陣列資料轉換為實體類

發一波很6的程式碼 EntityUtils ,將陣列資料轉換為實體類

package cn.fht.carsys.component.util.common;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class EntityUtils {
    private static Logger logger = LoggerFactory.getLogger(EntityUtils.class);
 
    /**
     * 將陣列資料轉換為實體類
     * 此處陣列元素的順序必須與實體類建構函式中的屬性順序一致
     *
     * @param list           陣列物件集合
     * @param clazz          實體類
     * @param <T>            實體類
     * @param model          例項化的實體類
     * @return 實體類集合
     */
    public static <T> List<T> castEntity(List<Object[]> list, Class<T> clazz, Object model) {
        List<T> returnList = new ArrayList<T>();
        if (list.isEmpty()) {
            return returnList;
        }
        //獲取每個陣列集合的元素個數
        Object[] co = list.get(0);
 
        //獲取當前實體類的屬性名、屬性值、屬性類別
        List<Map> attributeInfoList = getFiledsInfo(model);
        //建立屬性類別陣列
        Class[] c2 = new Class[attributeInfoList.size()];
        //如果陣列集合元素個數與實體類屬性個數不一致則發生錯誤
        if (attributeInfoList.size() != co.length) {
            return returnList;
        }
        //確定構造方法
        for (int i = 0; i < attributeInfoList.size(); i++) {
            c2[i] = (Class) attributeInfoList.get(i).get("type");
        }
        try {
            for (Object[] o : list) {
                Constructor<T> constructor = clazz.getConstructor(c2);
                returnList.add(constructor.newInstance(o));
            }
        } catch (Exception ex) {
            logger.error("實體資料轉化為實體類發生異常:異常資訊:{}", ex.getMessage());
            return returnList;
        }
        return returnList;
    }
 
    /**
     * 根據屬性名獲取屬性值
     *
     * @param fieldName 屬性名
     * @param modle     實體類
     * @return 屬性值
     */
    private static Object getFieldValueByName(String fieldName, Object modle) {
        try {
            String firstLetter = fieldName.substring(0, 1).toUpperCase();
            String getter = "get" + firstLetter + fieldName.substring(1);
            Method method = modle.getClass().getMethod(getter, new Class[]{});
            Object value = method.invoke(modle, new Object[]{});
            return value;
        } catch (Exception e) {
            return null;
        }
    }
 
    /**
     * 獲取屬性型別(type),屬性名(name),屬性值(value)的map組成的list
     *
     * @param model 實體類
     * @return list集合
     */
    private static List<Map> getFiledsInfo(Object model) {
        Field[] fields = model.getClass().getDeclaredFields();
        List<Map> list = new ArrayList(fields.length);
        Map infoMap = null;
        for (int i = 0; i < fields.length; i++) {
            infoMap = new HashMap(3);
            infoMap.put("type", fields[i].getType());
            infoMap.put("name", fields[i].getName());
            infoMap.put("value", getFieldValueByName(fields[i].getName(), model));
            list.add(infoMap);
        }
        return list;
    }
}

相關推薦

6程式碼 EntityUtils 陣列資料轉換實體

package cn.fht.carsys.component.util.common; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Construct

javaJSON字串轉換實體物件基於net sf json實現

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

設置用戶密碼時全角轉換半角

英文字母 har 分享 elf bsp log 密碼 解決 mage 情景: 註冊管理員賬號,用戶輸入的是全角密碼,登錄時輸入半角密碼,顯示密碼錯誤 解決方案: 將全角密碼改成半角密碼 var password = self.loginForm.password /

html 頁面/jsp 頁面 日期格式的轉換日期格式轉換字串型別

jsp 頁面 引入jstl標籤庫中fmt <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 使用標籤進行日期Date型別到String 字串的轉化 <fmt:formatDate valu

ionic2 geolocation定位geolocation座標轉換百度座標高德地圖座標

安裝 geolocation 外掛 執行以下命令 npm install --save @ionic-native/geolocation 將geolocation外掛在app.module.ts內宣告 import { Geolocation } from '@ionic-nativ

Python解密網易雲音樂.ncm檔案.ncm檔案轉換.mp3檔案實現隨處播放(另附C++已編譯轉換器)

網易雲音樂把.mp3音樂檔案加密為.ncm檔案,導致不能將下載好的音樂複製到其它裝置或使用非網易雲音樂播放器播放,該程式可將.ncm檔案逆向解密為.mp3檔案並保留最高音質。 另有C++已編譯.exe轉換器,將.ncm檔案拖到.exe上直接執行轉換,生成.mp3檔案在.ncm檔案相同路徑。點選下

次面向物件的體操:JSON字串轉換巢狀物件的種方法

能不能把這個JSON串轉成相應的物件,更易於使用呢? 為了方便講解,這裡重複寫下JSON串。 { “item:s_id:18006666”: “1024”, “item:s_id:18008888”: “1024”, “item:g_id:1800

阿里雲虛擬主機使用免費申請的SSL證書http請求轉換https

最近在開發微信小程式,部分資料需要從後臺獲取,但是我的阿里雲虛擬主機的域名是沒有SSL證書,是http請求,而微信小程式新增的伺服器域名要求是https的,沒辦法,只能想辦法將http請求轉換成https; 我採取的辦法是通過阿里雲申請免費的SSL證書,然後通過阿里雲CDN服務來完成間接跳轉配置

C# 獲取當前時間戳時間戳轉換當前本地時間

/// <summary> /// 獲取當前本地時間戳 /// </summary> /// <returns></returns> pub

實現atoi這個函式一個字串轉換整數。如果沒有合法的整數返回0。如果整數超出了32位整數的範圍返回INT_MAX(2147483647)如果是正整數

public class Solution {    /**     * @param str: A string     * @return: An integer     */    public int atoi(String str) {        // write your code here 

Java如何解析某個目錄下xml檔案XML檔案轉換報表資料來源?

在Java開發的報表工具FineReport中,假如在目錄下儲存了幾個XML檔案,希望把XML檔案轉換為報表資料來源,同時希望展示動態xml資料來源的效果,這時可通過引數的方式,動態獲取xml欄位中的值再作為報表資料來源。Northwind.xml記錄資料格式如下:<?

資料結構4-利用棧的結構二進位制數轉換十進位制數

編寫一個程式,利用棧的結構,將二進位制數轉換為十進位制數,程式碼如下: #include"stdio.h" #include"math.h" #define STACK_INIT_SIZE 20 #define STACKINCREMENT 10 typedef char

python基礎str型別轉換float型別

from functools import reduce def str2float(s):      L=s.split('.');     return reduce(lambda x,y:y+x

最近在寫一些樹上的東西LCA的吧!

++ html str long ace efi algorithm quest http 不會樹剖的我只有去學tarjan和倍增了,個人覺得倍增比tarjan好打一點。。。 tarjan學習的地方 http://www.cnblogs.com/JVxie/p/485471

“刷” 程式設計師面試題掌握八成便可BATJ試~

最近看見了很多程式設計師成功入的BAT,小編這裡在網上搜集了一些國內一線網際網路公司的面試題和麵試技巧,特此整理分享給需要的技術人員,看你和BAT之間差了多少!    阿里巴巴   根據部分網友的反饋,阿里的面試共分為五輪,前兩輪均為電面(電話和視訊),四輪技術一

勒索病毒來了注意哦

就在這幾天,多家企業和朋友都碰到了一封勒索郵件,咱們看看郵件內容啊 下面是英文內容I'm is very good programmer, known in darkweb as jabez93.I hacked this mailbox more than six months ago,through i

maven流(6)——解決煩人的maven工程編碼和jdk版本自動切換問題

背景 有時候拿過別人的工程使用,update project之後發現編碼不對,中文全部亂碼,然後jdk也自動變成了1.5版本,專案報了一大堆錯誤。 這時候老手心裡還是很淡定,右擊專案,在屬性裡修改下編碼,然後在build path裡面改下jdk版本,搞定。 後來

Windows血崩大規模 0day 攻擊洩漏請運維穩定好情緒

2017.4.16 運維派補充: 運維派已根據微軟官網釋出針對Windows系統0day漏洞的處理建議:《Windows遠端命令執行0day漏洞的安全預警及其處理建議》 一大早起床是不是覺得陽光明媚歲月靜好?然而網路空間剛剛誕生了一波核彈級爆炸!Shadow Brokers再次洩露出一份震驚世界的機

20k~65k, 寒冬技術人才仍是剛需, 最後熱門崗位來襲快到碗裡來

    2018年,區塊鏈行業經歷了大起大落,有許多人失望離場。但這一年,區塊鏈技術在各個方向上都有了突破性進展,區塊鏈落地之路上微光也已經顯現,2018年的種種失敗,都是2019年行業發生鉅變的養料。   儘管在這短短一個月,傳多家國內

Google SketchUp有趣的軟體可以建立你所想要的任何3D模型

今天在Google的站點上看到這樣一個視訊,是用一個工具來做3D模型的,視訊上的效果非常的吸引人,請開啟以下地址觀看 Google SketchUp 是一款可供您用於建立、修改及共享 3D 模型的軟體。學起來比其它三維建模程式更容易,這就是為什麼許多人已經使用它的原因。