2008年09月04日

MySQLからS2JDBC-GenでEntityを自動生成しましょう(コマンドライン編)


目次


●序
●造
1.Apache-Antをダウンロード&セットアップ
2.S2JDBC-GenやSeasar2(S2JDBC)のJARファイルをダウンロード&セットアップ
3.MySQL Connector/J (JDBCドライバ)を配置
4.Seasar2とS2JDBC用のDICONファイルを作成
 convention.dicon
 s2jdbc.dicon
 jdbc.dicon
5.ビルドコンフィグファイル作成
6.Entityクラスの自動生成
●結
●おまけ的
フォルダ/ファイル構成




コードなにがしにもアップしていますが、
S2JDBC-GenのEntityクラスの自動生成機能を試してみます。

EclipseのAnt機能でも生成可能なのですが、ここではコマンドラインでAntコマンドを使用する方法で行います。

データベースはMySQLのインストール後の設定で構築したMySQL環境を使用します。

エンティティクラスの生成も併せて参考にして下さい。




1.Apache-Antをダウンロード&セットアップ


こちらからApache-Antをダウンロードします(本稿執筆時2008.09.03の最新はapache-ant-1.7.1-bin.zipです)。

apache-ant-1.7.1-bin.zipを解凍して出来た、apache-ant-1.7.1フォルダを任意の場所に移動します。本稿ではC:\usr\localに移動します。

PATHに"C:\usr\local\apache-ant-1.7.1\bin"を追加します。

2.S2JDBC-GenやSeasar2(S2JDBC)のJARファイルをダウンロード&セットアップ


作業ディレクトリ作成


以下のフォルダを作成します。
C:\usr\local\s2jdbc
C:\usr\local\s2jdbc\lib
C:\usr\local\s2jdbc\conf



S2JDBC-GenのJARファイル


こちらからS2JDBC-Gen(本稿執筆時2008.09.03の最新はS2JDBC-Gen 
0.9.0です)をダウンロードしましょう。

ダウンロードしたファイルを任意の場所で解凍して、
生成した"s2jdbc-gen\lib"配下にあるJARファイルを、
"C:\usr\local\s2jdbc\lib"フォルダにコピーします。


Seasar2(S2JDBC)のJARファイル



本当はSeasar2セットアップに従って、必要なモジュールをセットアップする
のですが、ここではサボっちゃいます。

こちらからS2JDBCのチュートリアル(本稿執筆時2008.09.03の最新
はS2JDBC Tutorial 2.4.28です)をダウンロードしましょう。
ダウンロードしたファイルを任意の場所で解凍して、生成した
"s2jdbc-tutorial\lib"配下にあるJARファイルを、"C:\usr\local\s2jdbc\lib"フォルダにコピーします。


3.MySQL Connector/J (JDBCドライバ)を配置


S2JDBC-GenがEntityクラスを自動生成する際には、MySQLデータベースに接続してカタログ情報を取得します。なので、実行時にはJDBCドライバが必要になります。

環境・必要なモジュール準備でダウンロードした"mysql-connector-java-5.1.6-bin.jar"を"C:\usr\local\s2jdbc\lib"フォルダにコピーします。

4.Seasar2とS2JDBC用のDICONファイルを作成


"C:\usr\local\s2jdbc\conf\convention.dicon"を以下の内容で作成します。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<component class="org.seasar.framework.convention.impl.NamingConventionImpl">
<initMethod name="addRootPackageName">
<arg>""</arg>

</initMethod>
</component>
<component class="org.seasar.framework.convention.impl.PersistenceConventionImpl"/>
</components>

"C:\usr\local\s2jdbc\conf\s2jdbc.dicon"を以下の内容で作成します。


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<include path="jdbc.dicon"/>

<include path="s2jdbc-internal.dicon"/>
<component name="jdbcManager" class="org.seasar.extension.jdbc.manager.JdbcManagerImpl">
<property name="maxRows">0</property>

<property name="fetchSize">0</property>
<property name="queryTimeout">0</property>
<property name="dialect">mysqlDialect</property>

</component>
</components>

"C:\usr\local\s2jdbc\conf\jdbc.dicon"を以下の内容で作成します。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components namespace="jdbc">
<include path="jta.dicon"/>
<component name="xaDataSource"

class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<property name="driverClassName">
"com.mysql.jdbc.Driver"
</property>
<property name="URL">

"jdbc:mysql://localhost:3306/sastruts"
</property>
<property name="user">"sastruts"</property>
<property name="password">"sastruts"</property>

</component>

<component name="connectionPool"
class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
<property name="timeout">600</property>

<property name="maxPoolSize">10</property>
<property name="allowLocalTx">true</property>
<destroyMethod name="close"/>

</component>



<component name="DataSource"
class="org.seasar.extension.dbcp.impl.DataSourceImpl"
/>
</components>



5.ビルドコンフィグファイル作成


"C:\usr\local\s2jdbc\s2jdbc-gen-build.xml"を以下の内容で作成します。

<?xml version="1.0"?>
<project name="sample" default="gen-entity" basedir=".">

<path id="classpath">
<fileset dir="lib"/>
</path>
<taskdef resource="s2jdbc-gen-task.properties" classpathref="classpath"/>

<target name="gen-entity">
<gen-entity
rootpackagename="mysql"
classpathref="classpath"
classpath="conf"
overwrite="true"

/>
</target>
</project>


6.Entityクラスの自動生成


Windowsのコマンドプロンプトを起動して、"C:\usr\local\s2jdbc"にチェンジディレクトリ(移動)して、以下のコマンドを実行します。


ant -f s2jdbc-gen-build.xml gen-entity

以下のような表示がされ、"src/main/mysql/entity"フォルダにエンティティクラスファイルが生成されます。

C:\usr\local\s2jdbc>ant -f s2jdbc-gen-build.xml gen-entity
Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre1.6.
0_07\lib\tools.jar
Buildfile: s2jdbc-gen-build.xml

gen-entity:

BUILD SUCCESSFUL
Total time: 3 seconds

"Unable to locate tools.jar."というメッセージは、JREのjavaコマンドを使用しているために出力されているだけなので、ここでは問題ないので無視して構いません。"tools.jar"は、JDKに同梱されています(C:\Program Files\Java\jdk1.6.0_07\libなどにあります)。antは開発環境で使用されることを前提としているためでしょうか?


以下の3つのエンティティクラスファイルが生成されます。

src/main/mysql/entity/Address.java
src/main/mysql/entity/Department.java
src/main/mysql/entity/Employee.java

中を見ると↓のようにテーブル結合のアノテートもされています。

Employee.java抜粋

/** addressIdプロパティ */
@Column(precision = 10, nullable = true, unique = false)
public Integer addressId;

/** address関連プロパティ */
@ManyToOne
public Address address;


おまけ的


フォルダ/ファイル構成


作業しているフォルダ/ファイルの構成は、以下のようになります。
srcフォルダ配下が生成されたエンティティクラスファイルです。

─────────────────────────────────────
C:\usr\local\s2jdbc
s2jdbc < Dir >
├ conf < Dir >

│ ├ convention.dicon 442 2008/09/03 14:37:57
│ ├ jdbc.dicon 1,306 2008/09/03 10:29:28
│ └ s2jdbc.dicon 542 2008/09/03 13:52:31
├ lib < Dir >
│ ├ ant-1.7.0.jar 1,289,806 2008/09/02 17:58:48
│ ├ aopalliance-1.0.jar 4,467 2008/06/26 23:53:12
│ ├ commons-logging-1.1.jar 52,915 2008/06/26 23:54:08
│ ├ freemarker-2.3.13.jar 870,292 2008/09/02 17:58:44
│ ├ geronimo-annotation_1.0_spec-1.0.jar 12,085 2008/06/26 23:53:50
│ ├ geronimo-ejb_3.0_spec-1.0.jar 31,752 2008/06/26 23:54:14
│ ├ geronimo-interceptor_3.0_spec-1.0.jar 8,954 2008/06/26 23:54:14
│ ├ geronimo-jpa_3.0_spec-1.0.jar 52,555 2008/06/26 23:54:00
│ ├ geronimo-jta_1.1_spec-1.0.jar 14,972 2008/06/26 23:54:04
│ ├ geronimo-jta_1.1_spec-1.0-tsr.jar 7,329 2008/06/26 23:54:08
│ ├ hsqldb-1.8.0.1.jar 625,096 2008/06/26 23:54:02
│ ├ javassist-3.4.ga.jar 471,005 2008/06/26 23:54:12
│ ├ junit-3.8.2.jar 120,640 2008/06/26 23:54:12
│ ├ log4j-1.2.13.jar 358,180 2008/06/26 23:54:10
│ ├ mysql-connector-java-5.1.6-bin.jar 703,265 2008/03/05 17:27:00
│ ├ ognl-2.6.9-patch-20070908.jar 166,995 2008/06/26 23:54:00
│ ├ poi-3.0-FINAL.jar 1,767,938 2008/06/26 23:53:56
│ ├ s2-extension-2.4.28.jar 385,584 2008/08/26 16:50:36
│ ├ s2-framework-2.4.28.jar 654,191 2008/08/26 17:34:36
│ ├ s2jdbc-gen-0.9.0.jar 366,917 2008/09/02 19:41:58
│ ├ s2-tiger-2.4.28.jar 569,177 2008/08/26 17:34:36
│ └ servlet-api.jar 97,703 2008/06/26 23:54:08
├ src < Dir >
│ └ main < Dir >
│ └ java < Dir >
│ └ mysql < Dir >

│ └ entity < Dir >
│ ├ Address.java 743 2008/09/04 09:03:35
│ ├ Department.java 752 2008/09/04 09:03:35
│ └ Employee.java 1,300 2008/09/04 09:03:35
└ s2jdbc-gen-build.xml 447 2008/09/04 08:53:57
─────────────────────────────────────
posted by 台北猫々 at 23:07| Comment(0) | TrackBack(0) | 技術メモ(SAStruts)