通过反射将对象的属性拼接成为字符串

来源:互联网 发布:算法研发工程师路线 编辑:程序博客网 时间:2024/04/30 02:38
 /**  * @return 返回指定类型sql 的局部;(update|insert)。  * @param entity 实体对象  *@param attrandfields 数组;三维数组。如:String[][] attrandfields={{attr1,attr2,attr3},{field1,field2,field3},{"","",""}}  *@param  sqltype=1[insert]|2[update]  * */  public static String getSqlPart(Object entity,String[][] attrandfields,int sqltype ) throws Exception{  attrandfields=getProperty(entity,attrandfields);  if(sqltype==1){    String fields="",values="";    for(int i=0;i<attrandfields[0].length;i++){    if(attrandfields[2][i]==null)continue;    fields+=","+attrandfields[1][i];    values+=",'"+attrandfields[2][i]+"'";    }    if(fields.startsWith(",")){fields=fields.substring(1);values=values.substring(1);}    return "("+fields+") values("+values+")";    }else  if(sqltype==2){    String fieldandvalue="";    for(int i=0;i<attrandfields[0].length;i++){    if(attrandfields[2][i]==null)continue;    fieldandvalue+=","+attrandfields[1][i]+"='"+attrandfields[2][i]+"'";    }    if(fieldandvalue.startsWith(",")){fieldandvalue=fieldandvalue.substring(1);}    return fieldandvalue+" ";    }return null; }  /**   * 用排除字段法,这里假设实体属性=字段名。   * 一般使用此方法,将不需要插入或更新的字段组成数组,传入此方法。   * 1为插入,2为更新。   * */  public static String getSqlPart(Object entity,String[] noattr,int sqltype ) throws Exception{  String fields="";  Class clazz = entity.getClass();         Field field[] = clazz.getDeclaredFields();         for (Field f : field) {         int idx=isTableField(f,noattr);      if(idx!=-1){continue;}      fields+=","+f.getName();      }      if(fields.startsWith(","))fields=fields.substring(1);      String[] attr=fields.split(",");      String[][] attrandfields=new String[3][attr.length];//{{attr.split(",")},{attr.split(",")},{attr.split(",")};      attrandfields[0]=attrandfields[1]=attr;     return  getSqlPart( entity, attrandfields, sqltype );  }  /**   * @return 返回指定实体,指定属性的值,如果不存在则为null。   * */  public static String[][] getProperty(Object entity,String[][] attrandfields) throws Exception {         Class clazz = entity.getClass();         Field field[] = clazz.getDeclaredFields();         for (Field f : field) {         int idx=isTableField(f,attrandfields[0]);      if(idx==-1){continue;}      boolean accessFlag = f.isAccessible();f.setAccessible(true);// 修改访问控制权限           Object v =f.get(entity);// invokeMethod(entity, f.getName(), null);         f.setAccessible(accessFlag);// 恢复访问控制权限          //System.out.println(f.getName() + "\t" + v + "\t" + f.getType());             attrandfields[2][idx]=(v!=null)?v.toString():null;               }         return attrandfields;  }    /**  * 此方法根据传入的属性,定位其在数组中的位置。并传回为value定位准备。 * @param f * @param attrs * @return */private static int  isTableField(Field f,String[]attrs){ for(int i=0;i<attrs.length;i++){ if(attrs[i].trim().equalsIgnoreCase(f.getName())){return i;} } return -1; }  /**这是将传入的实体,以及要获取get方法的属性传入。通过转换首字母大小写,进行获取。 * @param entity * @param fieldname * @param args * @return * @throws Exception */private static Object invokeMethod(Object entity, String fieldname,  Object[] args) throws Exception {         Class clazz = entity.getClass();         fieldname = fieldname.substring(0, 1).toUpperCase()   + fieldname.substring(1);         Method method = null;         try {             method = clazz.getMethod("get" + fieldname);         } catch (SecurityException e) {         } catch (NoSuchMethodException e) {             return " can't find 'get" + fieldname + "' method";         }         return method.invoke(entity);     }        //////////////////////public static void main(String[] args) {New  nue=new New();nue.setMake_man("zxy");nue.setNew_id("1111");nue.setMake_time("2011-12-12");nue.setMake_dpt_code("10506");  String[] attr=" New_id,new_no,new_org_code,new_date,new_man,description,asset_org_code, make_dpt_code ,Make_man,make_time,confirm_date,status".split(",");  //String field=" New_id,new_no,new_org_code,new_date,new_man,description,asset_org_code,make_dpt_code1,make_man,make_time,confirm_date,status";  String[][] attrandfield=new String[3][attr.length];//{{attr.split(",")},{attr.split(",")},{attr.split(",")}; attrandfield[0]=attrandfield[1]=attr;  try {String sqlpart=Util.getSqlPart(nue,attrandfield,1);System.out.println("insert into dtms_doc_new "+sqlpart);sqlpart=Util.getSqlPart(nue,new String[]{"serialVersionUID"},1);System.out.println("!--insert into dtms_doc_new "+sqlpart); sqlpart=Util.getSqlPart(nue,attrandfield,2);System.out.println("update dtms_doc_new set "+sqlpart+" where New_id=1");sqlpart=Util.getSqlPart(nue,new String[]{"serialVersionUID"},2);System.out.println("!--update dtms_doc_new set "+sqlpart+" where New_id=1");} catch (Exception e) {e.printStackTrace();}}

0 0
原创粉丝点击