jpa自定義查詢Map、List轉對象處理;bean對象與map、對象集合與map屬性集合互轉


一、BeanMap

util用例

 

package cc.ash.mvc.util;

import org.springframework.cglib.beans.BeanMap;

import java.util.*;

public class BeanMapUtil<T> {

    /**
     * 將屬性鍵值對map 轉為 對象
     */
    public T map2Bean(Map map, T bean) {
        BeanMap beanMap = BeanMap.create(bean);
        beanMap.putAll(map);
        return bean;
    }

    /**
     * 將屬性鍵值對map 轉為 對象
     */
    public T map2Bean(Map map, Class clz) throws IllegalAccessException, InstantiationException {

        T t = (T) clz.newInstance();
        return map2Bean(map, t);
    }

    /**
     * 將對象 轉為屬性鍵值對map
     */
    public Map bean2Map(T bean) {
        BeanMap beanMap = BeanMap.create(bean);
        Map map = new HashMap();

        for(Iterator itKey = beanMap.keySet().iterator(); itKey.hasNext();) {
            Object key = itKey.next();
            map.put(key, beanMap.get(key));
        }
        return map;
    }

    /**
     * 將集合對象 轉為屬性鍵值對map集合
     */
    public List<Map> beans2Maps(List<T> list) {
        if(list == null || list.isEmpty()) {
            return null;

        } else {
            final List<Map> maps = new ArrayList<>(list.size());
            list.forEach(t -> maps.add(bean2Map(t)));
            return maps;
        }
    }


    /**
     * 將屬性鍵值對map集合 轉為 對象集合
     */
    public List<T> maps2Bean(List<Map> maps, Class clz) throws IllegalAccessException, InstantiationException {

        BeanMap beanMap;
        T bean;
        List<T> list = new ArrayList<>();

        for (Map map : maps) {
            bean = (T) clz.newInstance();
            beanMap = BeanMap.create(bean);
            beanMap.putAll(map);
            list.add(bean);
        }

        return list;
    }

}

 

二、json

可識別大小寫下划線等,名稱一致即可。不需要數據類型強制對應。(eg: BigInteger -> long)

jpa 查詢返回Map 或List<Map>,大概率出現類型轉換異常。可使用fastjson將map轉為json,再將json解析為所需對象。

需要進一步處理的字段可添加注解

@JSONField(deserialize = false) 處理后調用setter設置。

當tinyint自動轉換為boolean類型等,可酌情使用 CONCAT(field, '') 或者ROUND(field, 0)處理。

...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM