📄 irowprocessor.java
字号:
package com.neu.wrm.common;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.*;
import org.apache.commons.dbutils.RowProcessor;
/*
* Created on 2005-4-12
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @author liuyuguang
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class IRowProcessor implements RowProcessor {
public Object[] toArray(ResultSet rs) throws java.sql.SQLException {
return null;
}
public Object toBean(ResultSet rs, Class type) throws java.sql.SQLException {
Map property = propertyDescriptors(type);//获取property的集合
ResultSetMetaData rsmd = rs.getMetaData();
Map mapColumnProperties = MapColumnProperties(rsmd, property);//获取column与property之间的映射集合
return createBean(rs, type, mapColumnProperties);//返回创建的bean
}
public List toBeanList(ResultSet rs, Class type)
throws java.sql.SQLException {
Map property = propertyDescriptors(type);//获取property的集合
List list = new ArrayList();
while (rs.next()) {
ResultSetMetaData rsmd = rs.getMetaData();
Map mapColumnProperties = MapColumnProperties(rsmd, property);//获取column与property之间的映射集合
Object ob = createBean(rs, type, mapColumnProperties);
list.add(ob);
}
return list;
}
public Map toMap(ResultSet rs) throws java.sql.SQLException {
return null;
}
//通过column和property之间的映射map,将resultSet赋值到bean当中
private Object createBean(ResultSet result, Class type, Map colp)
throws java.sql.SQLException {
Object target = newInstance(type);//实例化type类
for (Iterator it = colp.entrySet().iterator(); it.hasNext();) {
String value = "";
Map.Entry entry = (Map.Entry) it.next();
if (result.getObject(entry.getKey().toString()) != null)
value = result.getObject(entry.getKey().toString()).toString();//将指定的column的值赋给value
PropertyDescriptor property = (PropertyDescriptor) entry.getValue();//取出映射map中的property
callSetter(target, property, value);//调用callSetter将value装入到指定的property
}
return target;
}
//创建column和property之间的映射map
private Map MapColumnProperties(ResultSetMetaData rsmd, Map pds)
throws java.sql.SQLException {
int s = rsmd.getColumnCount();
Map colp = new HashMap();
for (int i = 1; i <= s; i++) {
//将property集中与columnName相同的property装入到map当中
if (pds.containsKey(rsmd.getColumnName(i)))
colp.put(rsmd.getColumnName(i), pds.get(rsmd.getColumnName(i)));
}
return colp;
}
//调用指定property的set方法,将value装入指定的类对象(target)
private void callSetter(Object target, PropertyDescriptor property,
Object value) throws java.sql.SQLException {
Method method = property.getWriteMethod();
try {
method.invoke(target, new Object[] { value });
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private boolean isCompitableType(Object ob, Class type) {
if (type.isInstance(ob))
return true;
else
return false;
}
private Object newInstance(Class type) throws java.sql.SQLException {
Object ob = null;
try {
ob = type.newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ob;
}
//将指定类的property装入map
private Map propertyDescriptors(Class type) throws java.sql.SQLException {
Map propertymap = new HashMap();
try {
BeanInfo beaninfo = Introspector.getBeanInfo(type);
PropertyDescriptor[] p = beaninfo.getPropertyDescriptors();
for (int i = 0; i < p.length; i++) {
propertymap.put(p[i].getName().toUpperCase(), p[i]);//以属性名作为key值
}
} catch (Exception e) {
e.printStackTrace();
}
return propertymap;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -