今、開発でHibernateというものを使用することになりました。
詳しくは説明できないので簡単にしますが、データベーススキーマからJavaBeansを生成、またはその逆ができたりと、要するにコーディングを楽にしてくれるものです。
で、今回はデータベーススキーマが既にあるので、そこからJavaBeansを生成するようにしました。
用意するものは、
- Apache-Ant
- commons-collections
- jakarta-log4j
- Velocity
- Hibernate (この時点ではhibernate-2.1.3)
- Middlegen (この時点ではmiddlegen-2.0-vo)
- 使用しているデータベースのJDBCドライバ
です。上記のものは適切な場所に展開してください。
まずはMiddlegenにてテーブルスキーマから、Hibernateが読み込めるマッピングファイルを生成します。下記がそれを行うためのbuild.xmlです。
<?xml version="1.0"?>
<project name="Middlegen" default="middlegen" basedir=".">
<!-- パッケージの名称などを指定してください -->
<property name="name" value="Sample"/>
<property name="build.dir" value="${basedir}/build"/>
<!-- ビルドする際のライブラリを格納するディレクトリを指定します -->
<property name="build.lib.dir" value="${basedir}/lib" />
<property name="build.gen-src.dir" value="${build.dir}/gen-src" />
<!--
MiddlegenではGUIでのテーブルスキーマ確認が行えます。
GUIで確認が行える環境であればyesとしてみてください。
出たときは結構感動するはずです。
-->
<property name="gui" value="yes" />
<!--
classpathでjarファイルを設定する場合、${basedir}/lib内のjarファイルを
idでまとめて定義するようにしました。
${basedir}/lib以下にはmiddlegenのjarファイル、その他必要なjarファイルを
コピーしておいてください。
-->
<path id="lib.class.path">
<fileset dir="${build.lib.dir}">
<include name="*.jar" />
</fileset>
</path>
<!-- マッピングファイルの出力ディレクトリを生成します -->
<target name="init">
<mkdir dir="${build.dir}" />
</target>
<target name="middlegen" description="Run Middlegen" depends="init">
<!-- initで行ってもいいかも... -->
<mkdir dir="${build.gen-src.dir}"/>
<!--
middlegenというタスクを定義します。これがないと何もできません。
middlegenを展開しますと、中にmiddlegen-2.0-vo.jarファイルがあ
りまして、この中に「middlegen.MiddlegenTask」クラスがあります。
これがantのタスクを定義するクラスとなります。
middlegenが必要とするjarファイルなども含めて、頭のほうで指定
した ${basedir}/lib ディレクトリ内へコピーしてください。
-->
<taskdef name="middlegen"
classname="middlegen.MiddlegenTask"
classpathref="lib.class.path" />
<!--
ここからmiddlegenが実行のタスクです。
-->
<middlegen
<!-- アプリケーション名です -->
appname="SampleApp"
prefsdir="${build.gen-src.dir}"
gui="${gui}"
<!--
JDBCの接続先設定です。
使用するデータベースに合わせて書いてください。
-->
databaseurl="....."
<!-- 以下3つはMiddlegenサンプルほぼそのままです。-->
initialContextFactory="${java.naming.factory.initial}"
providerURL="${java.naming.provider.url}"
datasourceJNDIName=""
driver="<使用するJDBCのドライバクラスの絶対名称>"
username="<データベースのユーザ名"
password="<ユーザ名に対するパスワード>"
schema="<設定があればデータベースのスキーマ名>"
catalog="<設定があればデータベースのカタログ名>">
<!--
テーブルを指定する場合は個々に指定もできますし、テーブルJOINも
できるのでかなり便利です。
このあたりはMiddlegenのマニュアルを見て頂いたほうが
分かりやすいです。
<table generate="true" name="MEMBER_TABLE" />
-->
<!--
MiddlegenからHibernateのスキーマファイルを生成します。
これがないとGUIでスキーマ定義を見るだけになってしまいます。
Middlegen内にHibernateプラグインがあるのでこれを使用します。
-->
<hibernate
destination="${build.gen-src.dir}"
package="${name}.hibernate"
javaTypeMapper="middlegen.plugins.hibernate.HibernateJavaTypeMapper" />
</middlegen>
</target>
<target name="clean" description="Clean all generated stuff">
<delete dir="${build.dir}"/>
</target>
</project>
次にlog4j.propertiesファイルを用意します。これはbuild.xmlファイルと同じ場所で構いません。
log4j.rootCategory=DEBUG, Console
# ファイル出力にしたほうが便利です
#log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console=org.apache.log4j.FileAppender
log4j.appender.Console.File=debug.log
log4j.appender.Console.Threshold=DEBUG
log4j.appender.Console.Append=true
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=(%-35c{2} %-4L) %m%n
こんな感じでしょうか。ここまで用意できましたら、antを実行してみます。
hogehoge@localhost> ant
実行しますと、カレントディレクトリにdebug.logが出力されていると思いますので、これで状況が確認できます。GUIモードを有効にしていますと、処理が完了したら画面が表示され、データベーススキーマの一覧が出るはずです。
ここで、画面上部に「Generate」ボタンがあると思いますので、このボタンを押すと、build.xmlで指定した「destination="${build.gen-src.dir}"」の場所にHibernateが読み込めるマッピングファイルが生成されます。
この出力されたファイルから今度はJavaBeansを生成するのですが、今日はたくさん書いたのでこれまでにしておきます。
触りだけ言っておきますと、このマッピングファイルからJavaBeansを生成するのにはHibernate-extensionsというライブラリ内の「hbm2java」を使用します。Hibernate-extensionsは同じくHibernateのホームページから入手可能です。こちらのほうは正直説明がなくても十分にわかるものかと思います。
build.xmlファイルの内容を書き換えました。
いくらなんでもclasspathで個々に指定するのは汎用性に欠けると思いましたので...
