Java反射の一点適用について
1956 ワード
ここには、データベースのヘルプクラスでクエリーの結果をlistに組み立てて返すために使用された小さなアプリケーションを記録します.いいえ、コードを見てください.
ResultSetを取得した後、それをLIST集合にカプセル化し、hibernateで直接取得することができます.もちろん、hibernateでどのように実現されているかは見ていません.私はここでは私の実現にすぎません.いくつかの制限条件が必要です.
1.beanオブジェクトを取得するのはここのinstです.
2.beanオブジェクトを取得するすべてのfieldドメインは、定義されたフィールドです.
3.各フィールドのsetメソッド名を作成する.
4.Resultsetから取り出した結果をBeanオブジェクトにセットする
5.beanオブジェクトをリストセットに入れる
6.return Listコレクション
制限条件:Beanオブジェクトの順序と書かれたクエリー文が検出した各フィールドの順序が一致することを保証します.そうしないと、冠李戴になります.
public List<Object> getList(String sql,Object[] params,Object obj){
ResultSet rs = null;
if(params == null){
rs = this.getRs(sql);
}else{
rs = this.getRs(sql, params);
}
List<Object> list = new ArrayList<Object>();
try {
while(rs.next()){
int i = 1;
Object inst = obj.getClass().newInstance();
Field[] fields = inst.getClass().getDeclaredFields();
for(Field field : fields){
String setStr = field.getName().substring(0, 1).toUpperCase();
String setMehtodName = "set"+setStr+field.getName().substring(1);
Method setMethod = obj.getClass().getMethod(setMehtodName, new Class[]{field.getType()});
setMethod.invoke(inst, new Object[]{rs.getString(i)});
i++;
}
list.add(inst);
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
return list;
}
ResultSetを取得した後、それをLIST集合にカプセル化し、hibernateで直接取得することができます.もちろん、hibernateでどのように実現されているかは見ていません.私はここでは私の実現にすぎません.いくつかの制限条件が必要です.
1.beanオブジェクトを取得するのはここのinstです.
2.beanオブジェクトを取得するすべてのfieldドメインは、定義されたフィールドです.
3.各フィールドのsetメソッド名を作成する.
4.Resultsetから取り出した結果をBeanオブジェクトにセットする
5.beanオブジェクトをリストセットに入れる
6.return Listコレクション
制限条件:Beanオブジェクトの順序と書かれたクエリー文が検出した各フィールドの順序が一致することを保証します.そうしないと、冠李戴になります.