gihyo.jp » DEVELOPER STAGE » 特集 » DBアクセスを定番化しよう DBFlute入門 » 第4回 ConditionBeanにおける結合やソート

DBアクセスを定番化しよう DBFlute入門

第4回 ConditionBeanにおける結合やソート

この記事を読むのに必要な時間:およそ 2 ~ 7.5 分

はじめに

前回は,ConditionBeanの条件組立ての基本機能をみていきました。

今回は,結合やソートの基本をみていきましょう。

ConditionBean

ConditionBeanにおける結合とは?

まず,ConditionBeanにおける結合とは何を示すかを意識合わせしておきましょう。結合のそのものの意味では単に「テーブルを結合する」ことだけを示します。結合すること自体は「手段」であり「目的」ではありません。

では,目的はどんなものがあるかというと,主に次の2つに整理できます。

  • 結合先テーブルのデータを取得すること
  • 結合先テーブルの条件で結果を絞り込むこと

ConditionBeanにおける結合は,このような目的を意識した仕様となっています。具体的には,プログラマはConditionBeanに対して上記の目的をそのまま伝えます。そして,結合をするかしないかは,指定された目的を基に自動で判別します。

例えば,「結合先テーブルの条件で結果を絞り込むこと」という目的を達したい場合は,以下(リスト1,2)のようになります。

リスト1:結合先テーブルのデータを取得する-ConditionBeanでの指定

final MemberCB cb = new MemberCB();

// 親テーブルの会員ステータスを結合し,Select句に含める。
cb.setupSelect_MemberStatus();

リスト2:結合先テーブルのデータを取得する-実行されるSQL文

select member.MEMBER_ID, ... , memberStatus.MEMBER_STATUS_CODE, ...
  from MEMBER member
    left outer join MEMBER_STATUS memberStatus
      on member.MEMBER_STATUS_CODE = memberStatus.MEMBER_STATUS_CODE

また,「結合先テーブルの条件で結果を絞り込むこと」という目的を達したい場合は,以下(リスト3,4)のようになります。

リスト3:結合先テーブルの条件で結果を絞り込む-ConditionBeanでの指定

final MemberCB cb = new MemberCB();

// 親テーブルの会員ステータスを結合し,
// 「'正'という文字で始まる会員ステータス名」という条件で絞り込む。
cb.query().queryMemberStatus().setMemberStatusName_PrefixSearch("正");

リスト4:結合先テーブルの条件で結果を絞り込む-実行されるSQL文

select member.MEMBER_ID, ...
  from MEMBER member
    left outer join MEMBER_STATUS memberStatus
      on member.MEMBER_STATUS_CODE = memberStatus.MEMBER_STATUS_CODE
 where memberStatus.MEMBER_STATUS_NAME like '正%'

無論,これら目的が同居する場合は,以下(リスト5,6)のようになります。

結合に関連する目的が2つ指定されたからといって,SQL上でJoin節が2つ出力されてしまうことはありません。

リスト5:結合先テーブルの条件で結果を絞り込む-ConditionBeanでの指定

final MemberCB cb = new MemberCB();

// 親テーブルの会員ステータスを結合し,Select句に含める。
cb.setupSelect_MemberStatus();

// 親テーブルの会員ステータスを結合し,
// 「'正'という文字で始まる会員ステータス名」という条件で絞り込む。
cb.query().queryMemberStatus().setMemberStatusName_PrefixSearch("正");

リスト6:結合先テーブルの条件で結果を絞り込む-実行されるSQL文

select member.MEMBER_ID, ..., memberStatus.MEMBER_STATUS_CODE, ...
  from MEMBER member
    left outer join MEMBER_STATUS memberStatus
      on member.MEMBER_STATUS_CODE = memberStatus.MEMBER_STATUS_CODE
 where memberStatus.MEMBER_STATUS_NAME like '正%'

ConditionBeanでは,結合先テーブルの条件を追加したからといって,勝手に結合先テーブルのデータを取得することはしません。

実際の業務ロジックでは,「結合先テーブルの条件で絞り込んでデータとして取得するのは基点テーブルのみ」ということも多々あります。不要な結合先のテーブルのデータは取得しないようにするべき,というのがConditionBeanの思想です。

「呼び出し側プログラムが必ず何のテーブルを取得したいのか? (絞込み条件に関わらず)を意識するべき」という考えのもと設計されています。

著者プロフィール

久保雅彦(くぼまさひこ)

DBFluteメインコミッタ。主にオープン系の開発に従事。DB設計・DB周りの実装などを担当することが多い。

コメント

コメントの記入

G-CLOUD

ピックアップ

エンジニアパワーアップ講座 ~システム基盤を活用するための基礎知識~

イマドキのエンジニアに要求されるさまざまな知識や能力。これらを効率よくキャッチアップしていくヒントをいろいろな視点から取り上げます。

LinuxCon Japan/ Tokyo 2010の歩き方

9月開催「LinuxCon Japan/ Tokyo 2010」の見どころと楽しみ方を,メインスピーカーの皆さんに自ら紹介していただきましょう。

自分で考えた家が現実に!? ~「3DマイホームデザイナーLS3」で実現する,普請道楽のススメ

「3DマイホームデザイナーLS3」を使えば,パズル感覚の簡単操作で理想の住まいを立体的にシュミレートすることができます。

手軽に使える専用サーバ「さくらのマネージドサーバ」を徹底チェック

1台のサーバを占有して使うことができる「さくらのマネージドサーバ」に新たに加わった「Core 2 Duoプラン」の特徴と魅力をお伝えします。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた情報や魅力を多角的に紹介します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

ただのメモでは勿体ない!Evernoteに人生を記憶しよう

これからEvernoteをはじめたい,もっとEvernoteを使いこなしたいという方向けにEvernoteの基本的な使い方から応用技,情報整理術やライフログなどの具体的な運用方法まで解説していきます。

Windows Phoneアプリケーション開発入門

Windows Marcketplace for Mobileがサービス開始され,作成したアプリケーションを個人でも世界をターゲットに公開できる環境が整ってきました。これを機にWindows Phoneアプリケーションの開発をしてみませんか?

機能と技術からわかる!システム基盤の実力

この連載では日立製作所のSOAプラットフォーム「Cosminexus(コズミネクサス)」のホワイトペーパーから,システム基盤を構成する技術とその考え方を紹介していきます。

ActionScript 3.0で始めるオブジェクト指向スクリプティング

野中文雄氏が,簡単なスクリプトは書いたことがあるという初級者を対象に,ActionScript 3.0の基本からクラス定義までを解説します。

いま,見ておきたいウェブサイト

この連載では,国内外の最新のウェブサイトを隔週更新で取り上げ,これら最新サイトの特徴や素晴らしい部分を,さまざまな角度から解説していきます。

Google Chrome版Firebug:デベロッパーツール取扱説明書

WebKitのWebInspector(デベロッパーツール)は飛躍的な進化を遂げています。多機能化するデバッガーの使い方とノウハウを詳細に解説します。

Ubuntu Weekly Recipe

Ubuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。

memcachedの活用と運用 実践編

本特集では,memcachedを利用している方に向けて,実践的なテクニックを伝授します。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス

最近のコメント