1. 程式人生 > >利用java反射將結果集封裝成為對象和對象集合

利用java反射將結果集封裝成為對象和對象集合

one base try param tex csdn eject ack jlist

java反射機制是什麽

反射機制是在運行狀態中,可以知道任何一個類的屬性和方法,並且調用類的屬性和方法;

反射機制能夠做什麽

1、判斷運行對象的所屬類
2、構造任意一個類的對象
3、獲取任意一個類的屬性和方法
4、調用任意屬性和方法
5、生成動態代理

利用反射將結果集封裝成為對象或者集合(實測可用)

package coral.base.util;import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import
java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import wfc.service.database.RecordSet;

public
class ReflectUtils {
/**
* 將一個map集合封裝成為bean對象

* * @param param
* @param clazz
* @return
*/

public static <T> T MapToBean(Map<String, Object> param, Class<?> clazz) {
Object value = null;

Class[] paramTypes = new Class[1];

Object obj = null
;

try {
obj = clazz.newInstance();

// 獲取類的屬性
Field[] declaredFields = clazz.getDeclaredFields();
// 獲取父類或接口的公有屬性
Field[] superFields = clazz.getSuperclass().getFields();

List<Field[]> list = new ArrayList<Field[]>();
if (declaredFields != null) {
list.add(declaredFields);
}
if (superFields != null) {
list.add(superFields);
}
for (Field[] fields : list) {
for (Field field : fields) {
String fieldName = field.getName();
// 獲取屬性對應的值?
value = param.get(fieldName);
// 把值設置進入對象屬性中 這裏可能是有屬性但是沒有相應的set方法,所以要做異常處理
try {
PropertyDescriptor pd = new PropertyDescriptor(
fieldName, clazz);
Method method = pd.getWriteMethod();
method.invoke(obj, new Object[] { value });
} catch (Exception e1) {
}
}
}
} catch (Exception e1) {
} return (T) obj;
}
/**
* 獲取類的所有屬性,包括父類和接口
* @param clazz
* @return
*/

public static List<Field[]> getBeanFields(Class<?> clazz) {
List<Field[]> list = new ArrayList<Field[]>();
Field[] declaredFields = clazz.getDeclaredFields();

Field[] superFields = clazz.getSuperclass().getFields();
if (declaredFields != null) {
list.add(declaredFields);

}
if (superFields != null) {
list.add(superFields);
}
return list;
} /**
* 從結果集中獲取出值
* @param fieldName
* @param rs
* @return
*/

public static Object getFieldValue(String fieldName, ResultSet rs) {
Object value = null;
try {
//捕獲值不存在的異常
value = rs.getObject(fieldName);
return value;
} catch (SQLException e) {
//oracle數據庫的列都是大寫,所以才查找一次
fieldName = fieldName.toLowerCase();
try {

value = rs.getObject(fieldName);
return value;
} catch (SQLException e1) {
//結果集中沒有對應的值,返回為空
return null;
}

}
}
/**
* 方法重載,
* @param fieldName
* @param rs 這個是封裝過的結果集
* @return
*/

public static Object getFieldValue(String fieldName, RecordSet rs) {
Object value = null;
value = rs.getObject(fieldName);
return value;
}

/**
* 方法重載
* @param rs 封裝過的結果集
* @param clazz
* @return
*/

public static <T> T RSToBean(RecordSet rs, Class<?> clazz) {
Object obj = null;
List<Field[]> list = getBeanFields(clazz);
try {
obj = clazz.newInstance();

for (Field[] fields : list) {
for (Field field : fields) {
String fieldName = field.getName();
// String fieldName = field.getName();?
Object value = getFieldValue(fieldName, rs);
try {
PropertyDescriptor pd = new PropertyDescriptor(
fieldName, clazz);
Method method = pd.getWriteMethod();
method.invoke(obj, new Object[] { value });
} catch (Exception e1) {

}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return (T) obj;
}
/**
* 把結果集封裝成為bean對象
* @param rs
* @param clazz
* @return
*/

public static <T> T RSToBean(ResultSet rs, Class<?> clazz) {
Object obj = null;
List<Field[]> list = getBeanFields(clazz);
try {
while (rs.next()) {
obj = clazz.newInstance();


for (Field[] fields : list) {
for (Field field : fields) {
String fieldName = field.getName();
// String fieldName = field.getName();?
Object value = getFieldValue(fieldName, rs);
PropertyDescriptor pd = new PropertyDescriptor(
fieldName, clazz);
Method method = pd.getWriteMethod();
method.invoke(obj, new Object[] { value });
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return (T) obj;
}
/**
* 把結果集封裝成為List

* * @param rs
* @param clazz
* @return
*/

public static <T> List<T> RsToList(ResultSet rs, Class<?> clazz) {
ArrayList<T> objList = new ArrayList<T>();
// 獲取所有的屬性
List<Field[]> list = getBeanFields(clazz);
try {
while (rs.next()) {
// 定義臨時變量
Object tempObeject = clazz.newInstance();

// 添加到屬性中
for (Field[] fields : list) {
for (Field field : fields) {
String fieldName = field.getName();
// 獲取屬性值?
Object value = getFieldValue(fieldName, rs);
PropertyDescriptor pd = new PropertyDescriptor(
fieldName, clazz);
Method method = pd.getWriteMethod();
method.invoke(tempObeject, new Object[] { value });
}
}
objList.add((T) tempObeject);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return objList;
}}

利用java反射將結果集封裝成為對象和對象集合