import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Map;
import java.util.Set;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
public class BeanFactory {
// 得到bean中的属性
private ArrayList isClassFileds(String className,ArrayList beanArr){
ArrayList arr=new ArrayList() ;
try{
Class xt = Class.forName(className);
Field fieldlist[] = xt.getDeclaredFields();
Map obj = (Map) beanArr.get(0);
Set fields = obj.keySet();
Object[] values = fields.toArray();
for(int clsFiles = 0;clsFiles<fieldlist.length;clsFiles++){
Field fld = fieldlist[clsFiles];
for(int arrFilelds=0;arrFilelds<values.length;arrFilelds++){
String field = fld.getName();
String m_field = values[arrFilelds].toString();
if(m_field.toUpperCase().equals(field.toUpperCase())){
arr.add(field);
}
}
}
}catch(Exception e){
e.printStackTrace();
}
return arr;
}
// 通过一个arrylist返回一个classbean的arrylist
public ArrayList InitClass(String className,ArrayList beanArr) throws ClassNotFoundException, SecurityException, NoSuchFieldException, InstantiationException, IllegalAccessException{
ArrayList arr = new ArrayList();
ArrayList fields = isClassFileds(className,beanArr);
Class cls = Class.forName(className);
for(int i = 0;i<beanArr.size();i++){
Map map = (Map) beanArr.get(i);
Object obj = cls.newInstance();
for(int q = 0;q<fields.size();q++){
String fieldName = fields.get(q).toString();
Field field = cls.getField(fieldName);
field.setAccessible(true);
String value="";
try{
value = map.get(fieldName).toString();
}catch(Exception e){
// 数据库中地段为空。
}
field.set(obj, value);
}
arr.add(obj);
}
return arr;
}
// dbutil 调用返回装载map的arraylist
public ArrayList getQueryResultUtil(String sql){
QueryRunner qr = new QueryRunner() ;
ResultSetHandler rsh = new MapListHandler();
ArrayList map = new ArrayList();
Connection con = dbCon.getCon();// 自己的连接数据库类,在这里就是得到数据库的connection
try {
map= (ArrayList) qr.query(con, sql, rsh);
} catch (SQLException e) {
e.printStackTrace();
}
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return map;
}
public ArrayList BeanInitFactory(String className,String sql){
ArrayList beanList = getQueryResultUtil(sql);
try {
return InitClass(className,beanList);
} catch (SecurityException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}
说明: 用到了 dbutil jar包 网上有 。