作成 2004/1/6
更新 2004/3/10
HibernateはJavaのORマッピングツールです。LGPLライセンスで提供されており、無償で利用できます。JDO(JSR-012)の仕様に準拠しているわけではではないですが、導入が簡単で使いやすいツールになっています。最近よく使っている人みるような?
動くまで
ああ動いたよってだけのメモですが。
ここではHibernateを利用して、DBへのINSERTとSELECT(だけ)を行ってみます。
以下からhibernateをダウンロードします。
ここでは最新リリースの2.1.1 をダウンロードしました。
次のリソースを作成(またはコピー)しました。Javaのクラスはhogeパッケージにつくっています(なんとなく)。設定ファイル系はクラスパスのルートに置いています。
src ソースディレクトリ(コンパイルされてクラスパス) +--hoge +--Dog.java テーブルにマッピングするJavaクラス +--Insert.java INSERTするクラス +--Select.java SELECTするクラス +--dog.hbm.xml マッピングファイル +--hibernate.cfg.xml hibernateの設定ファイル +--log4j.properties log4j
hibernateのhibernate2.jarおよび、lib以下の各種JARにクラスパスを通します(きっと全部はいらないと思うが)。あと、JDBCドライバも必要です。
hibernate.cfg.xmlがhibernateの設定ファイルです。hibernate.hbm2ddl.autoプロパティーを指定して、実行時にCREATE文を発行するようにしています。hibernate.show_sqlは発行するSQLがダンプされます。デバッグにどうぞ。指定できるプロパティーはマニュアル(ここのHibernate JDBC Properties、Other properties付近)を参照してください。
マッピングしたJavaクラスがDog.javaです。普通のJavaBeansです。
dog.hbm.xmlがJavaクラスとDBテーブルのマッピングファイルです。idの主キーはuuidパターンというもので自動生成してます。なお、hibernate設定ファイルにこのマッピングファイルを指定していますが、プログラム中から指定もできます。
hibernateがlog4jを使っているので、log4jの設定ファイルも必要です。ここではhibernateのsrc以下のlog4j.propertiesをコピーして使いました。
hibernateのDBアクセスは、SessionFactoryからSessionを作成して、Sessionを通して行います。更新系の処理はSessionからTransactionを作成して使います。で、保存はこんな感じと。こういうコードでINSERT出来るんじゃん!(無理やり感動)
Dog dog = new Dog(); dog.setName("akita"); dog.setAge(10); session.save(dog);
SELECTはこんな感じ。
List list = session.createCriteria(Dog.class).list();
検索条件には、HQL(Hibernate風SQL)か、Expressionクラスを使った条件指定が可能です(上の例は単に全件検索)。
えー、というわけで、まあ、すんなり使えますね。どのO/Rマッピングツールもそうですが、マッピングファイルを書くのが一番めんどくさかったりするわけで、それはツールである程度自動生成したりするのでしょうが。でもって、パフォーマンスや信頼性は、ある程度使い込まないとわからないですねと。
機会があったら、もうちょっと調べます。せめてJOINぐらい。今宵はここまで。
参考
nekop.nondakure.jp - Hibernate
http://nekop.nondakure.jp/hiki/hiki.cgi?Hibernate
WEB+DB PRESS vol.18 これからのデータベースアクセス
http://www.gihyo.co.jp/magazines/wdpress/archive/Vol18
Java Developer 2004.1 JDO&O/Rマッピング
http://www.javadeveloper.jp/static/200401/index.html