データベースとJSFの関係
Webアプリケーションでは、データベースのデータと連携して処理を行うことが多くあります。こうした場合のために、JSFには「DataTable」という機能が用意されています。これは、JSPに記述されるカスタムタグで、これを利用することであらかじめ用意されているデータを表として整形し表示することができます。
ただし、このDataTable自体にデータベースアクセスの機能があるわけではありません。実をいえば、JSFそのものには、データベースにアクセスする便利な機能というのは用意されていないのです。ですから、自分でデータベースから必要なデータを取り出し、使いやすい形に処理するようなプログラムを用意しておかなければいけません。ですから、JSFでのデータベース利用は、意外と下準備が大変だったりします。
最近は、Hibernateなど「O/Rマッピング」と呼ばれるフレームワークなどが登場し、非常に簡単にデータベースから必要なデータを取り出せるようになってきました。JSFとしては「データベースアクセスのところは、それぞれで好きな仕組みを使ってください。こっちでは、用意されたデータを表示する仕組みだけを用意しておきます」という形にしてあるのでしょう。
Java DBにデータベースを用意する
では、実際に簡単なサンプルを作りながらデータベースアクセスを行ってみましょう。まずは、データベースの準備です。とりあえず、ここではJavaに標準搭載されている「Java DB」を使うことにしましょう。ここでは、Cドライブの「DerbyDatabases」フォルダ内に「MyDB」というデータベースを作成し、そこに「addressdata」というテーブルを用意することにします。テーブルの構造は、以下のようになります。
create table addressdata
(id int primary key,
name varchar(100),
mail varchar(100),
memo varchar(255));
プライマリキーとなるid、そして名前、メールアドレス、メモを管理するname、mail、memoフィールドからなります。非常にシンプルなテーブルですね(addressdataなのに住所の項目がないのはなぜだ?という突っ込みは、なしで)。
なお、Java DBの基本的な使い方については、Eclipseを使ってデータベース作成するための手順が「Java 6のJava DBでデータベース」、「Eclipse GanymedeでJava DBを利用する」に掲載してあります。これらを参考にしてください。
アプリケーションの基本設計
では、このテーブルを利用するためのプログラムを作成しましょう。どのような形で利用すれば一番使いやすいか、ざっと考えてみてください。ここでは、以下のように設計していくことにします。
・データベース管理
データベースにアクセスし、レコードを取得するBeanクラスを作成し、これをJSFの設定ファイルに登録して利用することにします。
・レコード管理
1つ1つのレコードは、各フィールドの値を管理するクラスを用意し、このクラスのインスタンスとして利用するようにします。
・表示用JSP
DataTableを使い、データベース管理Beanからデータをもらい表示します。
ざっとこのような形でプログラムを構成していくことにします。データベースアクセスは専用のクラスに切り離し、必要に応じてそれを利用しながら動かしていこうというわけです。