通过反射将对象的属性拼接成为字符串
来源:互联网 发布:算法研发工程师路线 编辑:程序博客网 时间: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
- 通过反射将对象的属性拼接成为字符串
- 通过反射将实体类拼接成字符串
- java-反射(1)-通过反射改变对象的属性
- 通过反射将一个对象的值赋给另一个对象中对应的属性 不需要用set、get
- 通过自定义元注释将java对象的所有属性以字符串“字段中文:值”输出
- 通过反射技术获得实例对象的属性值
- Java中通过反射获得对象的属性信息
- Java中通过反射获得对象的属性信息
- Java通过反射获取和设置对象的属性值
- 通过反射完成不同对象之间的属性拷贝
- 通过java反射机制操作对象的属性方法
- http 请求时,通过反射拼接对象参数工具
- 通过反射获取类中的属性,并且将类中的属性名称以及对应的值赋给另一个类中的对象
- js中input的属性设置问题(变量设置,字符串拼接,通过函数设置)
- java通过反射设置对象私有属性
- 填报将字符串拼接
- 反射+自定义属性拼接sql
- c# 通过反射属性, 把源对象写入目标对象
- 博弈论的一点资料,关于NIM和SG函数
- 求助: 写一句正则表达式
- java学习日记-内部类的访问特点?
- 进程间的通信
- TortoiseSVN的使用,以及冲突解决办法
- 通过反射将对象的属性拼接成为字符串
- cocos2d-x之系统时间和随机数 .
- Hadoop
- json天气预报解析
- HIVE中join、semi join、outer join举例详解
- 用VisualSVN Server创建版本库,以及TortoiseSVN的使用
- 约瑟夫环!!!!
- ERROR: Can not connect to monitor daemon!的问题
- SVN服务器搭建!