java resultset封装_Java把ResultSet封装Bean(利用xml mapping和BeanProcessor.toBean())

本文介绍了如何将Java的ResultSet结果集封装到自定义的Bean中,主要利用XML映射文件和BeanProcessor.toBean()方法。首先展示了XML映射文件的结构,接着详细解析了WrapResultSet2BeanUtil工具类的实现,包括读取XML映射、处理ResultSet和创建Bean的过程。此外,还提到了Spring配置中如何使用该工具类。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值