<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~~~~  回復  更多評論   


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


    網站導航:
     

    公告

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

    統計

    常用鏈接

    留言簿(13)

    隨筆分類(71)

    隨筆檔案(179)

    文章檔案(13)

    新聞分類

    IT人的英語學習網站

    JAVA站點

    優秀個人博客鏈接

    官網學習站點

    生活工作站點

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩吃奶摸下AA片免费观看| 亚洲午夜精品国产电影在线观看| 亚洲影院天堂中文av色| 国产一区二区免费视频| 久久久久亚洲精品男人的天堂 | 久久精品国产亚洲Aⅴ蜜臀色欲 | 中文字幕亚洲日韩无线码| 免费手机在线看片| 久久精品免费电影| 亚洲色成人网一二三区| 亚洲欧洲无码AV电影在线观看| 日本一线a视频免费观看| 久久久久亚洲AV成人网人人网站 | 午夜在线亚洲男人午在线| 免费人成激情视频在线观看冫 | 久久国产精品2020免费m3u8| 国产成人无码免费视频97| 亚洲色偷拍另类无码专区| 国产永久免费高清在线| 亚洲色欲色欲综合网站| 一级毛片免费视频网站| 在线成人爽a毛片免费软件| 四虎成人精品在永久免费| 亚洲福利秒拍一区二区| 免费无码又黄又爽又刺激| 美女露100%胸无遮挡免费观看| 国产精品内射视频免费| 日本亚洲视频在线| AV片在线观看免费| 一级毛片不卡免费看老司机| 久久精品国产亚洲| 在线免费观看视频你懂的| 四虎必出精品亚洲高清| 亚洲成人免费在线| 亚洲AV无码专区在线播放中文| 日亚毛片免费乱码不卡一区| 国产福利免费观看| 亚洲va中文字幕| 麻豆精品国产免费观看| 一级毛片视频免费观看| 亚洲精品视频在线看|