1. mapping xml file
encoding="UTF-8"?>
class="com.persistent.Rpt1Info">
name="instituteCode" db="INSTITUTE_CODE" />
name="branchCode" db="BRANCH_CODE" />
name="txnDate" db="TXN_DATE" />
class="com.persistent.Rpt2Info">
name="instituteCode" db="INSTITUTE_CODE" />
name="branchCode" db="BRANCH_CODE" />
name="txnDate" db="TXN_DATE" />
2. WrapResultSet2BeanUtil
package cots.common.util;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.apache.commons.dbutils.BeanProcessor;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
import
org.springframework.jdbc.core.simple.ParameterizedRowMapper;
public class WrapResultSet2BeanUtil implements
ParameterizedRowMapper
{
private static Logger logger =
Logger.getLogger(WrapResultSet2BeanUtil.class);
private static final String xmlElementMapping =
"mapping";
private static final String xmlPropertyClass =
"class";
private static final String xmlPropertyName =
"name";
private static final String xmlPropertyDb =
"db";
private
List mappingXmls;
private Map
Map>
xmlMap;
private String toBeanName;
public
List getMappingXmls() {
return mappingXmls;
}
public void
setMappingXmls(List
mappingXmls) {
this.mappingXmls =
mappingXmls;
}
public Map
Map>
getXmlMap() {
return xmlMap;
}
public void
setXmlMap(Map
String>> xmlMap) {
this.xmlMap = xmlMap;
}
public String getToBeanName() {
return toBeanName;
}
public void setToBeanName(String toBeanName)
{
this.toBeanName =
toBeanName;
}
private void initiate() throws Exception {
logger.info("parse db xml
mapping to Map begin...");
this.readXml();
logger.info("parse db xml
mapping to Map end!");
}
private void readXml() throws DocumentException
{
xmlMap = new
HashMap
String>>();
Map
String> fieldMap = new
HashMap();
SAXReader reader = new
SAXReader();
Document document = null;
for (String mappingXml :
mappingXmls) {
document =
reader.read(Thread.currentThread().getContextClassLoader().getResourceAsStream(mappingXml));
Element root
= document.getRootElement();
for
(Iterator i =
root.elementIterator(xmlElementMapping); i.hasNext();) {
Element
mapping = i.next();
String
clazz = (String) mapping.attribute(xmlPropertyClass).getData();
List
fields = mapping.elements();
for
(Element field : fields) {
String
name = (String) field.attribute(xmlPropertyName).getData();
String
db = (String) field.attribute(xmlPropertyDb).getData();
fieldMap.put(db,
name);
}
xmlMap.put(clazz,
fieldMap);
}
}
}
@Override
public Object mapRow(ResultSet rs, int i) throws
SQLException {
return handleObject(rs);
}
private Object handleObject(ResultSet rs) throws
SQLException {
try {
if
(xmlMap.containsKey(toBeanName)) {
return
wrapToBeanByXmlMapping(rs, xmlMap.get(toBeanName));
} else
{
return
new BeanProcessor().toBean(rs, Class.forName(toBeanName));
}
} catch (Exception e) {
logger.error("Wrap
ResultSet to Bean ocurrs Exception >>
:");
logger.error(e.getMessage(),
e);
throw new
SQLException(e.getMessage(), e);
}
}
private Object wrapToBeanByXmlMapping(ResultSet
rs, Map fieldMap)
throws Exception {
Object obj = null;
Class>
clazz = Class.forName(toBeanName);
obj = clazz.newInstance();
Set
String>> entrySet =
fieldMap.entrySet();
for
(Iterator
String>> it = entrySet.iterator();
it.hasNext();) {
Entry
String> entry = it.next();
Field field =
obj.getClass().getDeclaredField(entry.getValue());
Method method
=
obj.getClass().getDeclaredMethod(getSetterMethod(entry.getValue()),
field.getType());
Object rst =
rs.getObject(entry.getKey());
method.invoke(obj,
rst);
}
return obj;
}
private String getSetterMethod(String fieldName)
{
fieldName = "set" +
fieldName.substring(0, 1).toUpperCase() +
fieldName.substring(1);
return fieldName;
}
public static void main(String[] args) throws
Exception {
ApplicationContext ctx = new
ClassPathXmlApplicationContext("classpath:lkregulatory-context.xml");
WrapResultSet2BeanUtil
wrapResultSet2BeanUtil = (WrapResultSet2BeanUtil)
ctx.getBean("wrapResultSet2BeanUtil");
wrapResultSet2BeanUtil.setToBeanName("cots.persistent.lkregulatory.Form1RptInfo");
wrapResultSet2BeanUtil.handleObject(null);
}
}
3. Spring Config
class="cots.common.util.WrapResultSet2BeanUtil"
init-method="initiate" lazy-init="false" >
name="mappingXmls" >
dbmapping/Form1RptInfo-mapping.xml