O/Rマッピングに挑戦中
前々から興味があったO/Rマッピングを使ってシステムを実装してみた。O/RマッピングとはデータベースのER図からJavaなどのオブジェクトに変換して、オブジェクトとして扱うことが出来る開発手法である。
本来Javaからデータベース内にアクセスを行うときはJDBCを利用して、自分でSQLを書かないといけないのだが、テーブルが増えてくるとSQL文を書く手間も増えていくため、そこをフレームワーク化して、データベースを使ったアプリケーション開発を楽にするためのものである。
今回使用しているのはHibernateという、オープンソースのO/Rマッピングツールを使用している。O/Rマッピングソフトを使っているとはいえ、根幹ではJDBCを使っているので、素のJDBCを直接操作するよりは遅くなってしまう。しかし、Hibernateではパフォーマンス良いと公式ページで明言している。またそれでも十分なパフォーマンスが得られない場合は、HQL(Hibernate Query Languate)を用いて、RDBMSに対してのダイレクトなアクセスが出来る。
Hibernateを使用するには設定ファイルを書く必要があるのだが、この設定ファイルを手書きするのは面倒なので、middlegenを使って自動生成した。Eclipse上であればMiddlegenIDEがEclipseプラグインとして用意されているので、それを利用すればデータベースに実際接続した後、適切な設定ファイルとデータ受け取り用のクラスを自動生成してくれる。
以下詰まった点など
- Hivernate初期化時にConfigurationクラスがExceptionInInitializerErrorをスローする。
hivernate.cfg.xmlがビルドバスに加わっていないのが原因。Eclipse上のビルドパスにhivernate.cfg.xmlが存在するパスを指定してやれば解決
- オブジェクトを書き込むときにSQLExceptionをスローする。
データベースに外部キー制約を設定した場合は、外部キーが参照しているオブジェクトをセッターを使って代入した後、データアクセスを行わなければならない。
- 問題はなさそうだが、大量に例外をコンソールに流す。
気にしない(ぉ
使ってみた感想ですが、高々テーブル二つのデータベースに対して適用するべき様なものではない気がしてきました。まあ練習になったからいいやってことで、色々実験をしてみることにします。