多表查詢(一對多)結果集處理方法(反射)
阿新 • • 發佈:2018-12-14
//T多表查詢中的一 如:年級 //M多表查詢中的多 如:學生 //field年級類在學生集合的屬性名 //field2學生類中年級物件的屬性名 //resultSet多表查詢得到的結果集
public static <T, M> T test(Class<T> tClass, Class<M> mClass, String field, String field2, ResultSet resultSet) { Field[] tFields = tClass.getDeclaredFields(); Method[] tMethods = tClass.getMethods(); Field[] mFields = mClass.getDeclaredFields(); Method[] mMethods = mClass.getMethods(); T t = null; M m = null; try { m = mClass.newInstance(); for (Field mField : mFields) { for (Method mMethod : mMethods) { if (mMethod.getName().startsWith("set")) { String mFieldByMethodName = mMethod.getName().substring(3, mMethod.getName().length()).toLowerCase(); if (mFieldByMethodName.equals(field)) { } else { if (mFieldByMethodName.equals(mField.getName())) { mMethod.invoke(m, resultSet.getObject(mField.getName())); } } } } } t = tClass.newInstance(); for (Field tField : tFields) { for (Method tMethod : tMethods) { if (tMethod.getName().startsWith("set")) { String tFieldByMethodName = tMethod.getName().substring(3, tMethod.getName().length()).toLowerCase(); if (tFieldByMethodName.equals(tField.getName())) { if (tFieldByMethodName.equals(field2)) { } else { tMethod.invoke(t, resultSet.getObject(tField.getName())); } } if (tFieldByMethodName.equals(field2)) { List list = new ArrayList(); list.add(m); tMethod.invoke(t, list); } } } } } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return t; }