Posted by: issotyo | June 16, 2010

Map2Map mapper menggunakan dozer

Dalam mengembangkan aplikasi java, kadang butuh untuk mapping dari satu object ke object lain. Untuk kebutuhan itu biasanya menggunakan apache common BeanUtils. Namun sekarang ada kebutuhan lain, yaitu mappingnya bisa dirubah tanpa perlu kompile class. Untuk itu, keturunan Map, yaitu HashMap digunakan sebagai objectnya, lalu alternatif dari beanutils digunakan Dozer . Fitur Dozer yang digunakan adalah mapping object to object menggunakan XML.
Sayangnya document Dozer untuk mapping dari Map2Map tidak jelas, dan tutorial di internet sangat minim. Dari hasil coba-coba akhirnya ada solusinya walaupun belum sempurna.

1. XML config mapping.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”>
   
    <mapping map-id=”prime”>
        <class-a>dozerlearn.CustomMapPrime</class-a>
        <class-b>dozerlearn.CustomMap</class-b>
        <field >
            <a key=”test1″>standardMap</a>
            <b key=”test11″>standardMap</b>
        </field>
        <field >
            <a key=”test1″>standardMap</a>
            <b key=”test12″>standardMap</b>
        </field>
        <field >
            <a key=”test2″>standardMap</a>
            <b key=”test21″>standardMap</b>
        </field>
        <field >
            <a key=”test3″>standardMap</a>
            <b key=”test31″>standardMap</b>
        </field>
    </mapping>
</mappings>

2. Buat CustomMap class untuk menampung hashmap:

import java.util.Map;

package dozerlearn;

import java.util.Map;

/**
 * @author dragon
 */
public class CustomMap {
  private Map standardMap;
  private Map standardMapWithHint;

  public Map getStandardMap() {
    return standardMap;
  }

  public void setStandardMap(Map standardMap) {
    this.standardMap = standardMap;
  }

  public Map getStandardMapWithHint() {
    return standardMapWithHint;
  }
}

3. Aplikasi uji cobanya:

package dozerlearn;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.dozer.DozerBeanMapper;

/**
 * @author dragon
 */
public class Main {

    public static void main(String[] args) {

        List myMappingFiles = new ArrayList();
        myMappingFiles.add(“mapping.xml”);

        DozerBeanMapper mapper = new DozerBeanMapper();
        mapper.setMappingFiles(myMappingFiles);

        CustomMap sourceObject = new CustomMap();
        HashMap hm = new HashMap();
        hm.put(“test1″,”test11″);
        hm.put(“test2″,”test21″);
        hm.put(“test3″,”test31″);
        sourceObject.setStandardMap(hm);
        System.out.println(“before :”+sourceObject.getStandardMap());
        CustomMap destObject = mapper.map(sourceObject, CustomMap.class,”");
        System.out.println(“result:”+destObject.getStandardMap());

    }
}

Hasil outputnya:

before :{test1=test11, test2=test21, test3=test31}
2010-06-16 10:55:39,509 Using the following xml files to load custom mappings for the bean mapper instance: [mapping.xml]

2010-06-16 10:55:39,790 Successfully loaded custom xml mappings from URL: [file:/D:/sourcecode/learn/nb/DozerLearn/src/mapping.xml]
2010-06-16 10:55:39,950 MAPPED: CustomMapPrime.standardMap –> CustomMap.standardMap    VALUES: test11 –> test11    MAPID: prime
2010-06-16 10:55:39,960 MAPPED: CustomMapPrime.standardMap –> CustomMap.standardMap    VALUES: test11 –> test11    MAPID: prime
2010-06-16 10:55:39,960 MAPPED: CustomMapPrime.standardMap –> CustomMap.standardMap    VALUES: test21 –> test21    MAPID: prime
2010-06-16 10:55:39,960 MAPPED: CustomMapPrime.standardMap –> CustomMap.standardMap    VALUES: test31 –> test31    MAPID: prime
result:{test12=test11, test11=test11, test31=test31, test21=test21}

Satu hal yang saya suka dari mapping si Dozer ini adalah dari satu key Map bisa dimapping ke beberapa key Map tujuan, seperti contoh diatas yaitu test1 dimapping ke test11 dan test12.

Semoga membantu dan selamat berDozer ria!

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Categories

Follow

Get every new post delivered to your Inbox.