java Dozer深copy工具類

前言

之前數(shù)據(jù)對象轉換用 spring 或者 apache的beanUtils.copyProperties(), 這個對象是淺copy的 所以在對象的字段是對象的的情況下會出現(xiàn)引用傳遞,導致了一些隱性的BUG侥加。
dozer是一種JavaBean的映射工具,類似于apache的BeanUtils颊艳。但是dozer更強大(dozer是深copy的),它可以靈活的處理復雜類型之間的映射糜烹。不但可以進行簡單的屬性映射送膳、復雜的類型映射瘦癌、雙向映射、遞歸映射等乌叶,并且可以通過XML配置文件進行靈活的配置盆偿。


引入dozer的 mavne配置

  <dependency>
            <groupId>net.sf.dozer</groupId>
            <artifactId>dozer</artifactId>
            <version>5.0</version>
        </dependency>

工具類

package cn.memedai.message.manage.common.util;

import com.google.common.collect.Lists;
import org.dozer.DozerBeanMapper;

import java.util.Collection;
import java.util.List;

/**
 * @Description: Dozer beanCopy
 * @Author: hongwang.zhang
 * @CreateDate: 2019/7/29 17:31
 * @Version: 1.0
 */
public class BeanMapperUtils {

    /**
     * 持有Dozer單例, 避免重復創(chuàng)建DozerMapper消耗資源.
     */
    private static DozerBeanMapper dozer = new DozerBeanMapper();


    private BeanMapperUtils() {
    }

    /**
     * 基于Dozer轉換對象的類型.
     */
    public static <T> T map(Object source, Class<T> destinationClass) {
        return dozer.map(source, destinationClass);
    }


    /**
     * 基于Dozer轉換Collection中對象的類型.
     */
    public static <T> List<T> mapList(Collection<?> sourceList, Class<T> destinationClass) {
        List<T> destinationList = Lists.newArrayList();
        for (Object sourceObject : sourceList) {
            T destinationObject = dozer.map(sourceObject, destinationClass);
            destinationList.add(destinationObject);
        }
        return destinationList;
    }


    /**
     * 基于Dozer將對象A的值拷貝到對象B中.
     */
    public static void copy(Object source, Object destinationObject) {
        dozer.map(source, destinationObject);
    }

}

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市准浴,隨后出現(xiàn)的幾起案子事扭,更是在濱河造成了極大的恐慌,老刑警劉巖乐横,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件求橄,死亡現(xiàn)場離奇詭異,居然都是意外死亡葡公,警方通過查閱死者的電腦和手機罐农,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來催什,“玉大人涵亏,你說我怎么就攤上這事∏悖” “怎么了溯乒?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長豹爹。 經(jīng)常有香客問我裆悄,道長,這世上最難降的妖魔是什么臂聋? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任光稼,我火速辦了婚禮或南,結果婚禮上,老公的妹妹穿的比我還像新娘艾君。我一直安慰自己采够,他們只是感情好,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布冰垄。 她就那樣靜靜地躺著蹬癌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪虹茶。 梳的紋絲不亂的頭發(fā)上逝薪,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音蝴罪,去河邊找鬼董济。 笑死,一個胖子當著我的面吹牛要门,可吹牛的內(nèi)容都是我干的虏肾。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼欢搜,長吁一口氣:“原來是場噩夢啊……” “哼封豪!你這毒婦竟也來了?” 一聲冷哼從身側響起狂巢,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤撑毛,失蹤者是張志新(化名)和其女友劉穎书聚,沒想到半個月后唧领,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡雌续,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年斩个,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驯杜。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡受啥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸽心,到底是詐尸還是另有隱情滚局,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布顽频,位于F島的核電站藤肢,受9級特大地震影響,放射性物質發(fā)生泄漏糯景。R本人自食惡果不足惜嘁圈,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一省骂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧最住,春花似錦钞澳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至脓魏,卻和暖如春逃延,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背轧拄。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工揽祥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人檩电。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓拄丰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親俐末。 傳聞我的和親對象是個殘疾皇子料按,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL卓箫、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,464評論 0 4
  • 個人專題目錄 Apache Commons包含了很多開源的工具载矿,用于解決平時編程經(jīng)常會遇到的問題,減少重復勞動烹卒。下...
    Java及SpringBoot閱讀 3,356評論 0 5
  • BeanUtils是Apache commons組件的成員之一闷盔,主要用于簡化JavaBean封裝數(shù)據(jù)的操作。它可以...
    hddwsz閱讀 2,976評論 0 0
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,093評論 1 32
  • MyBatis 理論篇 [TOC] 什么是MyBatis ?MyBatis是支持普通SQL查詢,存儲過程和高級映射...
    有_味閱讀 2,889評論 0 26