検索
連載

DbUtilsで結果セットをJavaBeansにマッピングするJavaTips 〜Javaプログラミング編

Share
Tweet
LINE
Hatena

基本的なデータベースアクセス方法の問題

 Javaから一般的なリレーショナルデータベース(以下、データベースと呼称)にアクセスするには、以下に示すようにjava.sqlパッケージのConnection、Statement、ResultSetを使うのが基本です。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 この基本的な方法では、以下のような問題があります。

  • リソースリークを防ぐため、毎回決まりきった終了処理コードを記述しなければならない
  • 例外発生時にも終了処理コードが必ず実行されるように考慮しないといけない

 このように、従来の方法ではコードの記述量が多く、記述方法にも気を使わなければいけませんでした。この問題は、Jakarta DbUtilsを使うことで解決できます。

DbUtilsの概要

 DbUtilsはJakarta Commonsプロジェクトの産物であり、Javaからデータベースにアクセスするためのツールです。DbUtilsはデータベースアクセスの基本的なAPIであるConnection、Statement、ResultSetを使用することによるコード記述の煩雑性を緩和し、かつ高速に動作することを目的として開発されました。DbUtilsはこれら基本的なAPIの代わりとして使用します。

 DbUtilsの使い方の基本は以下のとおりです。QueryRunner#queryの戻り値がデータベース検索の結果になりますが、QueryRunner#queryの第2引数として渡すResultSetHandlerの内容により、QueryRunner#queryの戻り値の型が変化します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 DbUtilsのダウンロードはhttp://jakarta.apache.org/commons/dbutils/downloads.htmlからできます。執筆時点の最新版はバージョン1.0です。ダウンロードしたzipファイルを展開して出てきたcommons-dbutils-1.0.jarをクラスパスに通すことでjavaコードから使用可能になります。

DbUtilsで結果セットをJavaBeansにマッピングする

 DbUtilsでは、QueryRunner#queryの第2引数として、org.apache.commons.dbutils.handlersパッケージのBeanHandlerまたはBeanListHandlerのインスタンスを渡すことで、データベースを検索した結果セットを自動的にJavaBeansにマッピングすることができます。これを利用するとさらにコードの記述量を削減することができます。BeanHandlerとBeanListHandlerの違いは以下のとおりです。

BeanHandlerとBeanListHandlerの違い
DbUtilsのクラス 機能 QueryRunner#query の戻り値の型
BeanHandler 最初のレコードのデータを、コンストラクタの引数に渡したJavaBeansクラスのインスタンスに格納し取得する コンストラクタの引数に渡したJavaBeansクラス
BeanListHandler BeansHandlerの全レコード対応版。全レコードについてBeanHandlerを適用し、得られた全JavaBeansインスタンスをListとして取得する List(個々の要素はコンストラクタの引数に渡したJavaBeansクラスのインスタンス)

 BeanHandlerまたはBeanListHandlerを用いて、データベースを検索した結果セットをJavaBeansにマッピングするには、データベースのテーブルのカラムとJavaBeansのプロパティとの間で型と名前(大文字小文字は同一視される)をそろえておく必要があります。例えばItems.sqlで定義されるテーブルITEMSに格納されるデータをJavaBeansにマッピングするには、MyBean.javaのようにJavaBeansを定義します。

Items.sql

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


MyBean.java

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 BeanListHandlerを使用して、データベースにアクセスし、テーブルITEMSに格納されている全データをMyBean.javaにより定義されるJavaBeansとして取得するjspの例をBeanListHandlerSample.jspとして示します。なお、前述したMyBean.javaのクラスファイルを含んだjarファイルと、DbUtilsのcommons-dbutils-1.0.jarがtomcat上のアプリケーションから参照可能になっており、DataSourceはJNDI名「java:comp/env/jdbc/TestDB」で取得できるものとします。tomcatでJNDI名を設定する方法は、「JNDI活用でデータソース管理を一元化する」を参照してください。

 BeanListHandlerSample.jspを見ると分かるように、わずか3行で目的の処理ができています。終了処理もInitialContextだけであり、コードもすっきりしているのが分かります。

BeanListHandlerSample.jsp

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


実行結果
実行結果

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る