package com.yd.wmsc.util; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; public class ReflectTest { public static List<String> getPrefixList(Class Clazz, String prefix) { List<String> list = new ArrayList<String>(); try { // 或得bean类 BeanInfo beninfo = Introspector.getBeanInfo(Clazz); Field[] fields = Clazz.getDeclaredFields(); for (Field field : fields) { System.out.println(field.getName()); } System.out.println("======================================"); // 获得所有的属性描述 PropertyDescriptor[] propertydescriptors = beninfo.getPropertyDescriptors(); for (PropertyDescriptor pd : propertydescriptors) { System.out.println(pd.getName()); if (pd.getName().startsWith(prefix)) { list.add(pd.getName()); } } } catch (Exception e) { e.printStackTrace(); } return list; } public static void main(String[] args) { ReflectTest.getPrefixList(ContentWordBean.class, "TX_TYPE_"); } }
package com.yd.wmsc.util; import java.util.List; public class ContentWordBean { //题目类型 private String itemType; //序号 private String serial; //题目内容 private String title; //答案 private List<String> answerList; //标准答案 private String lastAnswer; //答案解析 private String analysis; //难度系数 private String koc; //分数 private String score; //章名称 private String chapterName; //节名称 private String sectionName; //知识点 private String knowledge; //图片 public String getKnowledge() { return knowledge; } /*public void setKnowledge(String knowledge) { this.knowledge = knowledge; }*/ /*public String getItemType() { return itemType; } public void setItemType(String itemType) { this.itemType = itemType; } public String getSerial() { return serial; } public void setSerial(String serial) { this.serial = serial; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public List<String> getAnswerList() { return answerList; } public void setAnswerList(List<String> answerList) { this.answerList = answerList; } public String getLastAnswer() { return lastAnswer; } public void setLastAnswer(String lastAnswer) { this.lastAnswer = lastAnswer; } public String getAnalysis() { return analysis; } public void setAnalysis(String analysis) { this.analysis = analysis; } public String getKoc() { return koc; } public void setKoc(String koc) { this.koc = koc; } public String getScore() { return score; } public void setScore(String score) { this.score = score; } public String getChapterName() { return chapterName; } public void setChapterName(String chapterName) { this.chapterName = chapterName; } public String getSectionName() { return sectionName; } public void setSectionName(String sectionName) { this.sectionName = sectionName; } */ }
package com.yd.wmsc.util; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Properties; public class TestReflect { public static void main(String[] args) throws NoSuchFieldException{ ContentWordBean content = new ContentWordBean(); //topicbean.setChapter_id("123"); List<String> fields=new ArrayList<String>(); //fields.add("topic_id"); //fields.add("node_id"); getInsertSql(ContentWordBean.class,fields,"e_topic",""); getSql(ContentWordBean.class,fields); } private static void getSql(Class className,List<String> suffixs) { try { //或得bean类 BeanInfo beninfo = Introspector.getBeanInfo(className); //获得所有的属性描述 PropertyDescriptor [] propertydescriptors = beninfo.getPropertyDescriptors(); for(PropertyDescriptor pd:propertydescriptors){ //获得读写方法 System.out.println(pd.getName()); System.out.println(pd.getReadMethod().getName());//读 System.out.println(pd.getWriteMethod().getName());//写 } } catch (IntrospectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /**通常需要将一个bean对象通过get方法插入到表中,本方法可以动态的生成sql语句 * 将对象的sql语句生成 * suffixs长度为空,则对所有的field进行插入 * table为插入的表名 * */ public static String getInsertSql(Class className,List<String> suffixs,String table,String beanName) throws NoSuchFieldException{ if("".equals(table)){ System.out.println("表名为空"); return null; } String sqlparam = ""; String sql ="insert into "+table+"(sqlparam) values("; String bean = beanName; if("".equals(bean)){ //获得类名并且将第一个字母转为小写 bean = className.getSimpleName();; bean = bean.substring(0, 1).toLowerCase()+bean.substring(1); } //获得这个类的所有方法 Method[] methods = className.getMethods(); //是否取所有的fields if(suffixs.size() == 0){ //获得私有属性 Field[] fields = className.getDeclaredFields(); for(Field field:fields){ suffixs.add(field.getName()); } //获得共有属性 fields = className.getFields(); for(Field field:fields){ suffixs.add(field.getName()); } } System.out.println(suffixs); for(String suffix:suffixs) { for(Method method:methods){ //判断是否由get方法 if(method.getName().toLowerCase().equals("get"+suffix)){ try { //Field field = className.getDeclaredField(suffix); if (method.getReturnType() == java.lang.String.class){ sqlparam += suffix+","; sql +="‘\"+"+bean +"."+method.getName()+"()+\"‘,"; }else if (method.getReturnType() == int.class) { sqlparam += suffix+","; sql +="‘+"+bean +"."+method.getName()+"()+‘,"; } } catch (SecurityException e) { e.printStackTrace(); } } } } sql = sql.replace("(sqlparam)", "("+sqlparam.substring(0, sqlparam.length()-1)+")"); sql = "\""+sql.substring(0, sql.length()-1)+");\""; System.out.println(sql); return sql; } }
Clazz.getDeclaredFields 找到本类所有的成员
Clazz.getFields 找到本类及父类公有的成员
beninfo.getPropertyDescriptors()找到本类及父类所有的成员,但成员必须至少有get或set方法,并多一个class成员
时间: 2024-09-29 16:16:36