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

第1回 DBFluteの概要

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

はじめに

JavaにおけるDBアクセス周りの実装は,アプリケーション開発において非常に問題の多い領域です。数多くのO/Rマッパが登場していますが,現場の要件を満たせるものはまだまだ少ないかと思います。

そのような状況の中,DBFluteは誕生しました。本稿では,このDBFluteが一体どういったもので,現場の問題に対してどのように解決をしていくか,基本から応用まで紹介していきます。

今回のターゲットとする言語はJavaですが,実はDBFluteはC#版も存在します。ほぼ同じ仕様で実現されていますので,文法的な違いだけを読み替えることでC#ユーザの方にもお楽しみ頂ける内容かと思います。

前提とするテーブル構造

これからの説明で登場するサンプルの実装では,図1のテーブル構造を前提として話を進めていきます。

図1 サンプルのテーブル構造(詳細は,こちらをご覧ください)

図1 サンプルのテーブル構造

DBFluteの概要(1) 役割

DBFluteとは何でしょうか? まずは,DBFluteの役割というものを見ていきましょう。

S2Daoのクラスを自動生成するツール

S2Daoは,Seasarファウンデーションが提供するO/Rマッパです。非常に評判が良く,多くのアプリケーションで利用されています。S2Daoは優れたフレームワークですが,そこで利用するEntityクラスやDaoインターフェイスを自動生成するような機能はないため,DBFluteはそこを補完します。これがDBFluteの一番の根底にある役割です。つまり,DBFluteは,実際の存在するデータベースからテーブル構造の情報を取得し, S2Daoのクラスを自動生成します

DBFluteを知るためには,S2Daoを知ることが必要です。本稿ではS2Daoの詳細を割愛しますが,DBFluteを使う上で意識しないといけない機能を簡単に説明しておきます。

S2Daoは非常に素晴らしい機能を持っています。それは,SQL文を2WAY-SQLという形式で記述することが可能であるという点です。

S2Daoでは,外だしのSQLファイル(以降,外だしSQLと呼びます)にSQL文を記述します。その時,バインド変数をSQLのコメント形式で記載し,かつ,テスト値を共存させることが可能なのです。

2WAY-SQLのサンプルは,次のリスト1のようになります。

リスト1 2WAY-SQLのサンプル

select *
      from BOOK book
     where book.BOOK_ID = /*bookId*/6
       and book.BOOK_NAME like /*bookName*/'S2Dao' || '%'

これにより,「アプリケーションで実行するときもツールで実行するときも同じSQLを利用」するということが実現可能になっています。これは一見地味ですが,現場の開発者が望んでいた機能です。

開発者は,自分で書いたSQLをすぐにSQL*Plusなどのツールで実行したいものです。なぜなら,SQLをアプリケーションに組み込んで実行するには環境的な時間が掛かるからです。

2WAY-SQLを使えば,SQLの間違い(簡易文法ミス)の検知が非常に早い段階でわかり,実行までの環境的な時間のコストを節約できます。開発者も非常に気持ちよく作業をすることが可能です。

拡張ツール

DBFluteはただの自動生成ツールではなく,S2Daoを拡張する役割も持っています。正確には,「S2Daoを拡張するクラス群を自動生成」します。

S2Daoは,関連クラスの自動生成機能以外にも,現場で利用するには足りない部分があります。それは,S2DaoはSQLの自動生成機能が弱く,実質ほとんどのSQLを外だしSQLとして実装することになってしまうということです。

しかし,それではDB変更に弱く,SQL特有のケアレスミスも多発して効率がよくありません。その不足部分を補完する拡張をDBFluteが提供します。

その他Behaviorと呼ばれるクラスも存在し,高水準なDBアクセスプログラミングを提供します。

開発支援ツール

DBFluteは,自動生成ツールという役割を超えて,DB周りの実装・DB管理の支援を行います。具体的には,次の支援などを実行できます。

  • S2Daoの2WAY-SQLを利用した外だしSQLの一括テスト実行
  • データベース上の既存FK・テーブルをDROPした後のDDL文実行

著者プロフィール

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

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

コメント

コメントの記入