HibernateのHQLを使用し、java.util.Dateクラスを元にDB検索
GW中に、以前から作成しようとしていた作業日報プログラムについて、一気に作成してしまおうと計画していました。結果としては、復習しなくてはいけないことが多すぎて、終わりませんでしたが、いろいろと勉強になりました。その中で、おお〜!と思ったことを記事にします。
内容は、HibernateのHQLを使用し、java.util.Dateクラスを元にDB検索です。
まず、検索対象のテーブルは以下の通りです。
| dailyreport | CREATE TABLE `dailyreport` ( `ID` int(10) unsigned NOT NULL AUTO_INCREMENT, ・ `user` int(10) NOT NULL, `starttime` datetime DEFAULT NULL, `endtime` datetime DEFAULT NULL, ・
この中のstarttimeを元に検索します。このテーブルに対し、DailyReportというクラスを準備しHibernateでORマッピングします。starttimeはDailyReportクラスの中でjava.util.Dateクラスとしてマッピングしました。
このDailyReportに対し、HibernateのHQLを用いた検索は以下のようになります。
List<DailyReport> drlist = drsession.createQuery( "from DailyReport DR where DR.starttime between :from and :to") .setParameter("from", begindate) .setParameter("to",enddate) .list();
starttimeを対象にHQLでデータ検索をかけている所です。:fromと:toタグのところには、PreparedStatementのように、後からパラメーターをセットしています。ここで渡しているbegindateやenddateは、目的の日付の0時と23時59分…を示すjava.util.Dateクラスのインスタンスです。
SQLでは文字列や式等をもっと記述する必要があると思いますが、HQLではシンプルですね。DB依存も少ないと思います。