脱离持久化框架下的BsaeDao示例

在网上无意间看到这篇文章,给出了一个不错的脱离框架的BaseDao,由于字数限制,原文就不上传了,有需要的朋友可从本页下方找到原文的引用地址。针对作者的源代码,我也在此把我做的优化贴出来,这种思路相较源码,具有更高的重用性,更加能够体现面向对象的特征,使用起来也更加方便,且效率同样不低。

BaseDao:

    /**
     * 以对象来保存实体
     * @author 江豚
     * @param tableName 表名称
     * @param object 需要被持久化的实体对象
     * @return 数据持久化的执行结果,1为成功,0为失败
     */
    public int insertEntity(String tableName, Object object){
     conn = DbHelper.getConn();
     StringBuilder sq = new StringBuilder("insert into ").append(tableName);
     Class c = object.getClass();
     Field[] fields = c.getDeclaredFields();
     boolean judger =true;
     List<Field> fieldList = new ArrayList<Field>();
     try {
   for(int i = 0; i < fields.length; i++){
    Object val = fields[i].get(object);
    if(val!=null && !val.equals("") ){
     fieldList.add(fields[i]);
    }
      }
   if(fields.length>fieldList.size()){
    sq = sq.append("(");
    for(Field field : fieldList){
     sq.append(field.getName().toUpperCase() + ",");
    }
    sq = sq.replace(sq.lastIndexOf(","), sq.length(), ")");
   }
      sq.append(" values(");
      for(int i=0;i<(fieldList.size());i++){
       sq.append("?,");
      }
      sq = sq.replace(sq.lastIndexOf(","), sq.length(), ");");
      String sql = sq.toString();
      System.out.println("未赋值前:" + sql);
   pstmt = conn.prepareStatement(sql);
   for(int i=0;i<fieldList.size();i++){
    pstmt.setString(i+1, fieldList.get(i).get(object).toString());
   }
   System.out.println("赋值以后:"+sql);
   return pstmt.executeUpdate();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   return 0;
  }finally {  
            DbHelper.closeConn(conn, pstmt, null);  
        }
    }

你可能感兴趣的:(脱离持久化框架下的BsaeDao示例)