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

    優秀個人博客鏈接

    官網學習站點

    生活工作站點

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 黄网站色视频免费观看45分钟| 久久亚洲AV成人出白浆无码国产| 亚洲日韩AV一区二区三区四区 | 亚洲一区二区三区夜色| 中文字幕免费在线播放| 日日噜噜噜噜夜夜爽亚洲精品| 精精国产www视频在线观看免费| 亚洲伊人色欲综合网| 你好老叔电影观看免费| 亚洲国产日韩一区高清在线| 免费无码一区二区三区| 亚洲国产精品综合福利专区| 黄页网站免费观看| 亚洲成AV人片在WWW| 亚洲国产成人久久综合一区77| 黄色视屏在线免费播放| 亚洲欧洲自拍拍偷综合| 四虎在线视频免费观看| 日韩在线视频免费| 亚洲v高清理论电影| 成年女人免费视频播放77777| 亚洲AV成人一区二区三区观看| 国产黄色一级毛片亚洲黄片大全| 国产高清不卡免费视频| 亚洲人成未满十八禁网站| 亚洲精品A在线观看| 免费人成在线观看网站品爱网| 亚洲精品国产日韩| 亚洲婷婷国产精品电影人久久 | 3344免费播放观看视频| 亚洲色大成网站www| 久久伊人亚洲AV无码网站| 亚洲人成免费电影| 美女视频黄a视频全免费网站一区 美女视频黄a视频全免费网站色 | 亚洲成年人电影在线观看| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 青青青国产手机频在线免费观看 | 亚洲三级在线观看| 国产午夜亚洲精品午夜鲁丝片| 91高清免费国产自产| 一区二区三区精品高清视频免费在线播放 |