<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    新的起點 新的開始

    快樂生活 !

    JavaBean之間拷貝利器-Dozer(2) 映射數據類型不一致,級聯映射與自定義映射

        上次大概介紹了為什么要使用Dozer,以及對Dozer一個簡單介紹。 今天我們來討論如何使用Dozer映射復雜類型:
                1. 數據類型不一致。
                2. 級聯映射。
                3. 自定義映射。
        在討論之前,我們來說說一個朋友在上篇留言中提到的一個問題。估計大家應該都很關心。這個問題就是性能問題。Dozer其實底層使用了現成的BeanUtil,通過反射來映射,況且Dozer應用了Cache技術,應該比自個通過BeanUtils映射性能要好點。所以一般的應用應該不存在性能問題。

        Dozer對于基本類型之間轉換是不用配置的,比如Sting <------>Integer ,只要屬性名稱相同就Ok了。
        而常用的Date與String映射配置如下:
      <mapping date-format="MM-dd-yyyy">
    <class-a>net.blogjava.vincent.pojo.CustomerPo</class-a>
    <class-b>net.blogjava.vincent.vo.CustomerVo</class-b>
    <field>
    <a>birthday</a>
    <b>dateOfBirth</b>
    </field>
    </mapping>
       指明 CustomerPo里面的birthday對應CustomerVo里面的dateOfBirth.并且是Date與String之間雙向映射。

        對于屬性名稱不一致,也僅僅需要一個配置文件,如下:
          <mapping>
          <class-a>net.blogjava.vincent.pojo.CustomerPo</class-a>
          <class-b>net.blogjava.vincent.vo.CustomerVo</class-b>
           <field>
           <a>type</a>
         <b>transferType</b>
       </field>
     </mapping>
         指明 CustomerPo里面的type 對應CustomerVo里面的transferType.

        而對以級聯,比如CustomerPo里面的一個屬性映射為CustomerVo里么一個對象的屬性,下面的配置就可以了
               <mapping>
          <class-a>net.blogjava.vincent.pojo.CustomerPo</class-a>
          <class-b>net.blogjava.vincent.vo.CustomerVo</class-b>
           <field>
           <a>type</a>
         <b>transferType.type</b>
       </field>
        </mapping>

         上面其實就是Dozer基本用法,也涵蓋了大多數應用場景,可見基本不需要寫代碼,僅僅一個配置文件搞定,簡單吧。

          而對以更個性化的映射,就需要寫代碼了, 比如在CustomerPo中的into類型的transferId ,映射CustomerVo  String 類型transferType, 如果transferId =1 對應transferType=“immediateTranfer” 如果transferId =2 對應transferType=“scheduleTransfer” 反之亦然。就要寫一個Customer的Map了, 如下:
    import org.dozer.CustomConverter;

    public class CustomerMap implements CustomConverter {

        
    public Object convert(Object destinationFieldValue,
                Object sourceFieldValue, Class
    <?> destinationClass,
                Class
    <?> sourceClass) {
            Object returnVale 
    = null;
            
    if(sourceFieldValue!=null){
                
    if(sourceFieldValue instanceof Integer ){
                    
    if((Integer)sourceFieldValue == 1){
                        returnVale 
    ="immediateTranfer";
                    }

                    
    if((Integer)sourceFieldValue == 2){
                        returnVale 
    ="scheduleTransfer";
                    }

                    
                }

                
    if(sourceFieldValue instanceof String ){
                    
    if("immediateTranfer".equals(destinationFieldValue)){
                        returnVale 
    =1;
                    }

                    
    if("scheduleTransfer".equals(destinationFieldValue)){
                        returnVale 
    =2;
                    }

                    
                }


            }

            
    return returnVale;
        }


    }

        然后在配置文件配置就Ok了 如下:
          <mapping>
              <class-a>net.blogjava.vincent.pojo.CustomerPo</class-a>
             <class-b>net.blogjava.vincent.vo.CustomerVo</class-b>
           <field custom-converter="net.blogjava.vincent.mapUtil.CustomerMap">
           <a>type</a>
          <b>transferType</b>
          </field>
        </mapping>

    下面就是一個完整的配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation
    ="http://dozer.sourceforge.net E:\dozer\dozer-5.0-src\dozer-5.0\src\site\resources\schema\beanmapping.xsd"
        xmlns
    ="http://dozer.sourceforge.net">
        
    <mapping  date-format="yyyy-MM-dd">
            
    <class-a>net.blogjava.vincent.pojo.UserInfo</class-a>
            
    <class-b>net.blogjava.vincent.vo.UserInfoVo</class-b>
            
    <field>
                
    <a>colleage.name</a>
                
    <b>schoolName</b>
            
    </field>
        
    </mapping>
            
    <mapping>
            
    <class-a>net.blogjava.vincent.pojo.CustomerPo</class-a>
            
    <class-b>net.blogjava.vincent.vo.CustomerVo</class-b>
             
    <field custom-converter="net.blogjava.vincent.mapUtil.CustomerMap">
                
    <a>type</a>
                
    <b>transferType</b>
            
    </field>
        
    </mapping>

    </mappings>
        在后續的內容中,我們討論如何得到映射統計數據。

    posted on 2009-04-13 22:28 advincenting 閱讀(3135) 評論(1)  編輯  收藏

    評論

    # re: JavaBean之間拷貝利器-Dozer(2) 映射數據類型不一致,級聯映射與自定義映射 2009-04-16 13:36 popoer

    討厭xml~~~~  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     

    公告

    Locations of visitors to this pageBlogJava
  • 首頁
  • 新隨筆
  • 聯系
  • 聚合
  • 管理
  • <2009年4月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    統計

    常用鏈接

    留言簿(13)

    隨筆分類(71)

    隨筆檔案(179)

    文章檔案(13)

    新聞分類

    IT人的英語學習網站

    JAVA站點

    優秀個人博客鏈接

    官網學習站點

    生活工作站點

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 四虎亚洲精品高清在线观看| 国产自产拍精品视频免费看| 亚洲愉拍99热成人精品热久久| 亚洲av中文无码字幕色不卡| 大学生美女毛片免费视频| 456亚洲人成在线播放网站| 国产1000部成人免费视频| 亚洲视频在线观看免费视频| 午夜视频在线免费观看| 亚洲视频在线观看地址| 色片在线免费观看| 亚洲日本久久久午夜精品| 成人看的午夜免费毛片| 日韩欧美亚洲国产精品字幕久久久| 亚洲第一成年免费网站| 亚洲国产AV一区二区三区四区| 情侣视频精品免费的国产| 免费无遮挡无码视频在线观看| 亚洲高清无码综合性爱视频| 你懂得的在线观看免费视频| 久久精品7亚洲午夜a| 24小时免费看片| 亚洲中文字幕AV在天堂| 免费国产成人高清视频网站| EEUSS影院WWW在线观看免费| 亚洲AV无码国产精品色午友在线 | 日本免费网站在线观看| 国产产在线精品亚洲AAVV| 国产综合亚洲专区在线| 亚洲免费视频网站| 亚洲国产精品无码第一区二区三区 | 精品四虎免费观看国产高清午夜| 激情内射亚洲一区二区三区| 一区二区无码免费视频网站 | 亚洲日韩久久综合中文字幕| 亚洲成a人无码av波多野按摩| 免费一级毛片在线播放视频| 亚洲日韩国产一区二区三区在线| 亚洲一区二区高清| 成人免费激情视频| 亚洲视频在线免费|