Java

【JdbcTemplate】Queryの書き方(SELECT文)

投稿日:

JdbcTemplateでQueryを書く方法です!
(SELECT文で、1件・複数件を取得するケース)
 

前提

以下のテーブル(users)を持ち、格納するのはUserクラスという想定で説明していきます。

usersテーブル

Userクラス

 

データの取得

1件のみと複数件を取得するケースで説明します。
 

Mapで取得する方法

1件のみ取得

Map<String, Object>の形でQuery結果を取得する。

複数件を取得

List<Map<String,Object>>でQuery結果を取得する。

 

RowMapperで取得する方法(準備が必要)

RowMapperインターフェースを実装した、独自マッパーの準備が必要です。
 

準備

RowMapperインターフェースを実装したクラスを作成する。
(1件のみ、複数件の取得に共通)

 

1件のみ取得

RowMapperインターフェースを実装したマッピング結果を受け取る。

 

複数件を取得

RowMapperインターフェースを実装した結果をListで受け取る。

 

BeanPropertyRowMapperで取得する方法(準備不要!)

RowMapperインターフェースを実装したクラスの作成が不要!
テーブルのカラム名と、マッピングするクラスのフィールド名が同じであれば、
自動で値をセットしてくれる。

適用可能な例

・スネークケース
テーブルのカラム名:user_id
クラスのフィールド名:userId

・同じ
テーブルのカラム名:id
クラスのフィールド名:id

※格納するクラス(今回の場合で言うと、Userクラス)に、
 Default Constructor と setterがあることが前提です。
Lombokを使用しているのであれば、@Setterアノテーションか、
@Dataアノテーションがあればいいです。

 

1件のみ取得

 

複数件を取得

どれがいいのか?

1位:BeanPropertyRowMapper

最もマッピングが楽な方法。
setterが許されている開発現場であれば、これを使えばいい。

もし、setterを使えない(ValueObject化する必要がある)場合、
RowMapperで実装すればよい。

2位:RowMapper

マッピングするクラスの作成が少し手間である。
ただし作っておけば、Mapのように1件取得と複数件取得で2か所に
Userクラスへの格納処理を書くということは無い。

マッピングするクラスを独自に定義したいときには使えばよい。

3位:Map

Queryの取得結果をUserクラスに格納するのをわざわざ書かなければならないため、
手間とメンテナンスの面でお勧めできない。

-Java
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

【Java】オブジェクト指向の練習題材(会員オブジェクト)

前回記事、オブジェクト指向とは何なのかを簡単に説明してみるの練習題材です。   仕様 以下の会員クラスを作成し、Mainクラスで表示する。 会員クラスには、「会員」という単位で持つことできる …

【Javaサンプル】自動販売機を作成(Level1)

Javaの勉強用サンプルです。 テーマは自動販売機。 プログラミング初心者向けに書いています。   自動販売機を題材として選んだ理由 自社研修で行っている 自社研修で自動販売機を作成したので …

【Javaサンプル】自動販売機(Level2) メソッドに小さく分割する

前回の自動販売機(Level1)では、まず動くものを作りました。 そこでは1つのメソッド(Main)にすべてをコーディングしていましたが、 これを機能ごとに分割していきます。 実際の仕事では、1つの大 …

Eclipseでタブを半角スペースに変換する便利プラグイン!

Eclipseでタブを半角スペースに変換する便利プラグインに、 AnyEdit Toolsというものがあります。 導入方法を以下に記載致しましたので参考にして下さい。   どういうものか? …

【JdbcTemplate】Queryの書き方(更新系)

  前提 以下のテーブル(users)を持ち、格納するのはUserクラスという想定で説明していきます。 usersテーブル

記事を探す

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。