Dozer是干什么的亮隙?它能做些什么途凫?

Dozer是一個JavaBean到JavaBean之間的轉換工具。它就可以遞歸的將數(shù)據(jù)從一個對象復制到另一個對象溢吻。

Dozer的官方文檔:http://dozer.sourceforge.net/documentation/whymap.html
Dozer的github地址:https://github.com/DozerMapper/dozer

Dozer轉換好處:

  • 如果兩個類型屬性名稱一致维费,不論類型是否一致。dozer都可以自動配置
  • 如果類中有null property促王,dozer可以默認將屬性指為null犀盟,不會拋出nullPointerExeception異常。

Dozer整合項目(有三種:xml形式/注解配置/API配置)

引入jar

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

xml配置

  • xml頭部文件
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://dozer.sourceforge.net  
       http://dozer.sourceforge.net/schema/beanmapping.xsd">

</mappings> 

xml中mapping配置(將a中對應的屬性名轉換為b中對應的屬性名蝇狼,<a>標簽轉換為<b>標簽)

<mapping>
        <class-a>com.qding.brick.pojo.biz.Project</class-a>
        <class-b>com.qding.openapi.call.stage.struct.Project</class-b>
        <field>
            <a>id</a>
            <b>projectId</b>
        </field>
        <field>
            <a>name</a>
            <b>projectName</b>
        </field>
        <field>
            <a>address</a>
            <b>addr</b>
        </field>
</mapping>

注:官網(wǎng)著重建議:在現(xiàn)實應用中阅畴,最好不要每次映射對象時都創(chuàng)建一個Mapper實例來工作,這樣會產(chǎn)生不必要的開銷迅耘。如果你不使用IoC容器(如:spring)來管理你的項目恶阴,那么,最好將Mapper定義為單例模式豹障。

  • 測試:
Mapper mapper = new DozerBeanMapper();
DestinationObject destObject =  mapper.map(sourceObject, DestinationObject.class);
  • 補充:單例模式例子
public class DozerMapperConstant {
    private static final Mapper mapper= new org.dozer.DozerBeanMapper();
    public static DozerBeanMapper getDozerBeanMapper() {
        return mapper;
    }
}
Mapper announcementDozerMapper =  DozerMapperConstant.dozerMapper;

API方式

import static org.dozer.loader.api.FieldsMappingOptions.*;
import static org.dozer.loader.api.TypeMappingOptions.*;

...

BeanMappingBuilder builder = new BeanMappingBuilder() {
      protected void configure() {
        mapping(Bean.class, Bean.class,
                TypeMappingOptions.oneWay(),
                mapId("A"),
                mapNull(true)
        )
                .exclude("excluded")
                .fields("src", "dest",
                        copyByReference(),
                        collectionStrategy(true, 
                            RelationshipType.NON_CUMULATIVE),
                        hintA(String.class),
                        hintB(Integer.class),
                        FieldsMappingOptions.oneWay(),
                        useMapId("A"),
                        customConverterId("id")
                )
                .fields("src", "dest",
                    customConverter("org.dozer.CustomConverter")
                );
      }
    };

使用

DozerBeanMapper mapper = new DozerBeanMapper();
mapper.addMapping(builder);

注解方式 (mapping自動注入)

a類

public class SourceBean {

    private Long id;

    private String name;

    @Mapping("binaryData")
    private String data;

    @Mapping("pk")
    public Long getId() {
        return this.id;
    }

    public String getName() {
        return this.name;
    }
}

b類

public class TargetBean {

    private String pk;

    private String name;

    private String binaryData;

    public void setPk(String pk) {
        this.pk = pk;
    }

    public void setName(String name) {
        this.name = name;
    }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末冯事,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子血公,更是在濱河造成了極大的恐慌昵仅,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件累魔,死亡現(xiàn)場離奇詭異摔笤,居然都是意外死亡,警方通過查閱死者的電腦和手機垦写,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門吕世,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人梯投,你說我怎么就攤上這事命辖。” “怎么了分蓖?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵尔艇,是天一觀的道長。 經(jīng)常有香客問我么鹤,道長终娃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任蒸甜,我火速辦了婚禮棠耕,結果婚禮上余佛,老公的妹妹穿的比我還像新娘。我一直安慰自己窍荧,他們只是感情好辉巡,可當我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著搅荞,像睡著了一般红氯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咕痛,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天痢甘,我揣著相機與錄音,去河邊找鬼茉贡。 笑死塞栅,一個胖子當著我的面吹牛,可吹牛的內容都是我干的腔丧。 我是一名探鬼主播放椰,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼愉粤!你這毒婦竟也來了砾医?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤衣厘,失蹤者是張志新(化名)和其女友劉穎如蚜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體影暴,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡错邦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了型宙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撬呢。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖妆兑,靈堂內的尸體忽然破棺而出魂拦,到底是詐尸還是另有隱情,我是刑警寧澤箭跳,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布晨另,位于F島的核電站,受9級特大地震影響谱姓,放射性物質發(fā)生泄漏。R本人自食惡果不足惜刨晴,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一屉来、第九天 我趴在偏房一處隱蔽的房頂上張望路翻。 院中可真熱鬧,春花似錦茄靠、人聲如沸茂契。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掉冶。三九已至,卻和暖如春脐雪,著一層夾襖步出監(jiān)牢的瞬間厌小,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工战秋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留璧亚,地道東北人。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓脂信,卻偏偏與公主長得像癣蟋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子狰闪,可洞房花燭夜當晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內容

  • 這篇文章是本人在閱讀Dozer官方文檔(5.5.1版本疯搅,官網(wǎng)已經(jīng)一年多沒更新了)的過程中,整理下來我認為比較基礎的...
    靜默虛空閱讀 15,388評論 2 13
  • 本文由 JavaGuide 翻譯自 https://www.baeldung.com/java-performan...
    Guide哥閱讀 953評論 0 3
  • Dozer的github地址:https://github.com/DozerMapper/dozerDozer的...
    意識流丶閱讀 6,967評論 0 3
  • Mybatis源碼學習-開篇 學習源碼前埋泵,需要知道框架解決了什么問題幔欧,基本用法是什么,然后再去深入研究其內部實現(xiàn)秋泄,...
    flyUnique閱讀 200評論 0 0
  • 久違的晴天琐馆,家長會。 家長大會開好到教室時恒序,離放學已經(jīng)沒多少時間了瘦麸。班主任說已經(jīng)安排了三個家長分享經(jīng)驗。 放學鈴聲...
    飄雪兒5閱讀 7,528評論 16 22