1. 程式人生 > >多表查詢(一對多)結果集處理方法(反射)

多表查詢(一對多)結果集處理方法(反射)

//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;
    }