这两天在写框架,觉得这个很实用,贴上来共享!
主要作用就是 根据返回的结果集,然后读取对象的字段,调用set方法,把对应的值放入对象。
用过hibernate的人应该知道,实现的功能是一样的。
代码:
CollectionsHelper .java
package org.pan.sql;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import org.pan.convetor.FieldConvertor;
import org.pan.util.MethodsUitl;
import org.pan.util.StringUitl;
/**
* 集合助手,查询数据库返回对象列表
* @author Pan
*
*/
public class CollectionsHelper {
private List<Object> list=new ArrayList<Object>();
public CollectionsHelper(Object object ,ResultSet rs){
try{
String [] colunms=ColumnHelper.getColumn(rs);
while (rs.next()) {
//创建新的对象并实例化
Object ob=Class.forName(object.getClass().getName()).newInstance();
Method [] methods=ob.getClass().getMethods();
for(int i=0;i<colunms.length;i++){
String value = rs.getString(colunms[i]).trim();
String label=colunms[i];
if(MethodsUitl.exist(methods,"set"+label)){
if(label!=null){
Field field=ob.getClass().getDeclaredField(StringUitl.lowercase(label));
if(field!=null){
FieldConvertor.convertor(ob, field,value);
}
}
}
}
list.add(ob);
}
}catch (Exception e) {
System.err.println(e);
}
}
public List<Object> getList() {
return list;
}
}
除了上面代码之外,还需要一个类,那就是类型转换器,如果没有进行类型转换,会抛错。
类型转换器:
package org.pan.convetor;
import java.lang.reflect.Field;
import java.sql.Timestamp;
import org.pan.exception.FieldConversionException;
/**
* 类型转换器
* @author Pan
*
*/
public class FieldConvertor {
public static void convertor(Object object, Field field, String value)
throws FieldConversionException {
//设置字段可访问 否则会报错
field.setAccessible(true);
String type = field.getType().getName();
try {
if (type.equals("java.lang.String")) {
field.set(object, value.toString());
} else if (type.equals("java.lang.Integer")) {
field.set(object, Integer.parseInt(value));
} else if (type.equals("int")) {
field.set(object, Integer.parseInt(value));
} else if (type.equals("java.lang.Double")) {
field.set(object, Double.parseDouble(value));
} else if (type.equals("double")) {
field.set(object, Double.parseDouble(value));
} else if (type.equals("java.lang.Float")) {
field.set(object, Float.parseFloat(value));
} else if (type.equals("float")) {
field.set(object, Float.parseFloat(value));
} else if (type.equals("java.lang.Boolean")) {
field.set(object, Boolean.parseBoolean(value));
} else if (type.equals("boolean")) {
field.set(object, Boolean.parseBoolean(value));
} else if (type.equals("java.lang.Long")) {
field.set(object, Long.parseLong(value));
} else if (type.equals("boolean")) {
field.set(object, Long.parseLong(value));
} else if (type.equals("char")
|| type.equals("java.lang.Character")) {
field.set(object, value.charAt(0));
} else if (type.equals("java.lang.Short") || type.equals("short")) {
field.set(object, Short.parseShort(value));
}else if(type.equals("java.sql.Timestamp")){
field.set(object, Timestamp.valueOf(value));
}
} catch (Exception e) {
// throw new FieldConversionException(
// "Field type conversion exception ! Field:"
// + field.getName());
System.err.println(e);
}
}
}
注:转载请注明来源。2013年5月23日 22:09:12