java 反射 Bean 通过sql语句

 

 

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包 网上有 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值