結果をMapの配列で受け取るには? | Java Springの逆引きメモ

Java Springの逆引きメモ

JavaのSpring frameworkのメモを書いていきます!
初心者の勉強ノートなので間違いがあるかもしれませんが、何かヒントになることがあれば幸いです。

あまりいい方法ではないですが、1行のレコードをMapにして、

Mapを配列として受け取りたい場合があると思います。


List<Map<String, Object>>


この方法を見てみましょう。

簡単です!えっ


これは、SpringJDBCの機能そのままなので、受け取り部分だけ記述します。

全体のコードは、以下を参照してください。

・DBからデータを取得するには?(NamedParameterJdbcTemplateのサンプル)




【サンプルコード(Dao部分のみ)】

public List<Map<String, Object>> findMember(MemberSearchKey key) {
  //
  String sql = "select * from t_member ";
  String where = createWhere(key);
  
  //
  if(!where.equals("")){
   sql += " where " + where;
  }
  
  //会員リスト
  List<Map<String, Object>> result
    = this.namedParameterTemplate.queryForList(sql, key);
    
  return result;
 }





【説明】

特に説明することはありません。

queryForListを呼ぶだけです。


Springの機能は簡単ですがいろいろサポートしていて楽です。

ここでは、NamedParameterJdbcTemplate クラスでメソッドを呼んでいますが、

SimpleJdbcTemplate クラスにもこのメソッドは用意されています。



【補足】

DBのselectの結果をMapの配列で受け取るのはあまり良い方法ではありません。

例えば、最大でも20件くらいしか結果が返らないことが分かっているような(数が少ない)場合はOKです。

しかし、100件、1000件以上返る可能性がある場合は、避けたほうがいいと思います。


というのは、Mapはかなりメモリを消費するからです。

多用すれば、GCの原因にもなるでしょう。


また、保持しているオブジェクトの型がはっきりしません。(Object型なので)

そうすると、使用者が型の間違いをしたり、後で型が変わったときにリファクタリングできないので

コードを非常に変更しにくくします。


なるべくクラスを作成してそれをListにし、setter/getterで値を操作するようにしましょう!



参考:

・DBからデータを取得するには?(SimpleJdbcTemplate のサンプル)

・DBからデータを取得するには?(NamedParameterJdbcTemplateのサンプル)

・NamedParameterJdbcTemplateをうまく使うには?