<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站點

    優秀個人博客鏈接

    官網學習站點

    生活工作站點

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲AV无码男人的天堂| 91免费资源网站入口| 亚洲AV无码一区二区大桥未久| 亚洲国产日韩一区高清在线| 亚洲真人无码永久在线| 国产免费怕怕免费视频观看| 在线看片韩国免费人成视频| 免费观看成人久久网免费观看| 日本黄页网址在线看免费不卡| 亚洲日本va一区二区三区 | 黄页网站在线观看免费| 亚洲中文字幕乱码一区| 亚洲国产精品yw在线观看| 亚洲一区中文字幕久久| 日韩va亚洲va欧洲va国产| 精品国产亚洲一区二区在线观看| 国产成人精品123区免费视频| 国产精品成人免费一区二区| 国内精品免费麻豆网站91麻豆| 91香焦国产线观看看免费| 午夜爽爽爽男女免费观看影院| 免费国产99久久久香蕉| 成人爽a毛片免费| 全黄大全大色全免费大片| 99re6在线视频精品免费| 中文字幕在线视频免费观看| 一个人看的免费高清视频日本| 四虎影视久久久免费| 一日本道a高清免费播放| 国产日韩久久免费影院 | 国产aⅴ无码专区亚洲av麻豆 | av网站免费线看| jizz免费观看| 久久免费线看线看| 久久久久国产免费| 1000部夫妻午夜免费| 无码一区二区三区AV免费| 永久免费无码网站在线观看 | 一级人做人a爰免费视频| h片在线播放免费高清| 国产午夜精品久久久久免费视|