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!

Recent Comments