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


関連記事

オブジェクト指向でじゃんけんを作ってみる

最近、プログラム自体を書いていない時間を多いので、再勉強がてら少しコードを書いてみました。 目次 何を作ったか?OOPで考慮したこと設計上の条件動作例ソースコード 何を作ったか? テーマ:じゃんけん( …

【Java】Stringのequalsで定数を左側にする理由

JavaのStringでequalsによる等価判定を行う場合に、 比較対象となる定数は左側にする理由はNullPointerExceptionを回避するためです。 以降、NullPointerExce …

pageEncodingとcontentTypeのcharsetの違い

pageEncodingとcontentTypeのcharsetは処理されるタイミングが異なります。 それによって文字化けの原因につながっているので、どのように設定すればいいかを解説していきます。 目 …

Springメモ(あれ、どうすんだっけ?)

目次 @Autowiredアノテーションをつけることができる箇所(3つ)messages.propertiesを使えるようにするAOPのexecutionth:field と th:value の違い …

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

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

SpringFramworkの良書

Javaの基本を学んだ人が、次のステップ(Frameworkでの実装)として読む本。

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