0

バックグラウンド

Person多くの属性を持つクラスがあります。

私が欲しいもの

ユーザーがこれらの属性を編集できるようにします。

私が試したこと 1

関数を作成し、そのパラメーターはすべての属性であり、SQL ステートメントを作成してから、ストアド プロシージャを呼び出します。

問題

おそらく、ユーザーは自分のパラメーターの 1 つだけを編集したい (これはより一般的な状況です) ため、私のやり方では、1 つだけを編集したい場合でも、すべての属性を入力する必要があります。

私が試したこと 2

各属性の create 関数を使用して編集します。

問題

あまりにも多くのSQLステートメントを使用して、あまりにも多くの関数をコーディングする必要があります。

私の質問

問題を解決するための最良のアプローチは何ですか? そのための設計パターンはありますか?

前もって感謝します

4

1 に答える 1

3

属性を次のように更新することができますMap<String,Object> ここで、キー== 属性名と= 属性の値。

この上

  • 次の方法で複数の属性を取得できますMap
  • ユーザーが他の属性に値を与えることを制限することなく、単一の属性を取得して更新することもできます

ユーザーが同じものを提供したら、マップのエントリを繰り返し処理し、Personそれに応じてオブジェクトを更新できます。

編集: Personhasnameageproperties と言うと、メソッドupdatePersonaMapを含むエントリ where [key is"name" and value as "Actual Name"], [key is"age" and value as "15"]etcを指定します

Map次に、更新メソッドで、以下のように更新する属性を反復処理して取得できます

public boolean updatePerson(Map<String,Object> valueMap) {
    for(Entry<String, Object> enrty : valueMap.entrySet()) {
        String key = enrty.getKey();
        //Person p = ... logic to get person
        if("name".equals(key)) {
            //p.setName(enrty.getValue());
        }
        else
        if("age".equals(key)) {
            //...
        }
        //finally update Person into DB...  
    }
    return true;
}
于 2013-04-28T10:54:16.930 に答える