TopHatenarとHatenarMapsのDB!
S2JDBCによるデータベースアクセス
S2JDBCは、Java標準のデータベースアクセスAPIであるJPA(Java Persistence API)の仕様を改良する形で開発された、O/Rマッピングフレームワークです。TopHatenarとHatenarMapsでは、S2JDBCを用いることで、最小限のコード記述によるデータベースアクセスを実現しています。
ここでは、S2JDBCの使用例として、実際のアプリケーションコードの中から、エンティティの定義部分とクエリの発行部分の一部を取り上げます。前ページのE-R図と対比させながらご覧ください。
図3のリスト1は、TopHatenarのhatenarテーブルに対応するエンティティ定義です。S2JDBCによって、クラス中に宣言されたプロパティと、テーブル中の同名のカラムが、相互にマッピングされるようになっています。また、テーブル名や主キーなどのメタ情報は、アノテーションによって指定しています。
Javaでは、プロパティのフィールドをprivate修飾子で保護し、getterとsetterを設けるコーディングスタイルが一般的ですが、このエンティティ定義では意図的にフィールドをpublic宣言し、getterとsetterを省略することで、コードの簡略化を図っています。
図3のリスト2は、HatenarMapsで、長方形の座標範囲に含まれる地点の一覧を取得するメソッドです。コード中に登場するJdbcManagerは、S2JDBCに用意されているインタフェースで、データベースへの汎用アクセスメソッドを提供しています。
JdbcManagerは、JPAにおけるEntityManagerに相当するものですが、Java 5以降の新言語機能であるGenericsや可変長引数を積極的に活用した設計となっており、EntityManagerに比べて使い勝手が大幅に向上しています。
図3のリスト2の例からは、SQLの句に相当するfrom()やwhere()といったメソッドの連鎖によってクエリを発行する様子や、その結果をエンティティのリストとして取得する様子が分かります。
以上のように、Javaによるデータベースアクセスを強力に支援してくれるS2JDBCは、TopHatenarやHatenarMapsの開発をスピーディーに進める上で、大きな原動力の1つとなっています。
TopHatenarのソースコード公開中
今回は、TopHatenarとHatenarMapsのシステム構成を紹介し、そのデータベース構造について説明しました。また、S2JDBCを用いたデータベースアクセスの概要についても、コード例を示しながら解説を行いました。両アプリケーションとも、非常にシンプルなデータベース構造の上で稼働していることがお分かりいただけたかと思います。
なお、TopHatenarのソースコードは、筆者のSubversionリポジトリ(http://kaiseh.com/svn)で公開していますので、興味を持たれた方は実際にチェックアウトしてご覧いただければ幸いです。