| Eclipse Corner Article |
![]() |
Eclipse を用いた JSF/Spring/Hibernate プラグイン勉強会
|
※ このコンテンツは、NTTコムウェアの下記社員らによって作成されたものです。
Kouichi Murakami 村上孝一GUI ビルダー編 では Visual Editor を使用して SWTによる画面を作成してみました。今回は データベースのモデリングやモデルからSQL文の変換、実行などを行います。
紹介するプラグインは以下のとおりです。
まず、Database をインストールしましょう。今回は MySQL を使用します。
こちら
から アーカイブを取得します。
mysql-4.1.12-win32.zip
mysql-connector-java-3.1.8a.zip
起動していることの確認とユーザの追加をしましょう。例では
ユーザ: mysql、 パスワード: mysql を追加しました。
テーブル構成
mysql>SHOW DATABASES; +----------+ | Database | +----------+ | mysql | | test | +----------+ 2 rows in set (0.03 sec)
mysql>GRANT ALL PRIVILEGES ON *.* TO mysql@localhost IDENTIFIED BY 'mysql' WITH GRANT OPTION;
ER図の作成、モデルからSQLの生成、Database から モデルの作成 などができます。オープンソースのデータベースに対応している Core Edition と 商用 データベースに対応し、追加機能がある Pro Edition があります。
http://www.azzurri.jp/ja/index.jsp
ライセンス: 独自(Core Edition 1.0 は無償、Pro Edition 1.0 は有償)
「ソフトウェアの更新」 http://www.azzurri.jp/eclipse/plugins *GEF
のインストールが先に必要です。最新版は 1.1.0 リリース 2004/12/31 です。
モデリングをしてみましょう。
「新規」→「Database Modeling」→「Azzurri Cray Database Design Diagram」

SQL方言:MySQL 4.0 を選択し、「終了」

エディタの左側のアイコンをクリックしてテーブルの追加や関連を引きます。

テーブルダブルクリックして編集ウィンドウを開いてデータ項目を追加します。

また、Menubar> Cray > SQL ( CLEATE TABLE ) スクリプト生成 でテーブル作成用のSQL文 を作成できます。
クイックスタートガイド http://www.azzurri.co.jp/ja/software/clay/support/quick_start.jsp
データベースの内容を見たり、編集したり、SQLの実行ができます。Cary で作成した SQLを実行するなど、便利です。
http://www.geocities.com/uwe_ewald/dbedit.html
ライセンス: CPL Version 1.0 ( dbedit_1.0.3 )
プラグインのバージョンによって CPL、独自、GPL があります。
1.0.3 : CPL V1.0
1.0.2 : CPL V1.0
1.0.1 : 独自(商用利用は有償)
1.0.0 : GPL V2
0.9.9 : 独自(商用利用は有償)
ソフトウェアの更新: http://dbedit.sourceforge.net/update
または、ダウンロード: http://sourceforge.net/projects/dbedit
最新版は dbedit_1.0.3_1.bin.dist_3.X.zip リリース 2005/04/10
Database への接続を設定します。
パースペクティブ: DbEdit を開きます。
Tables (左側のウィンドウ) で右クリック →「Connection」→「Configuer」→「New」
ClassPath タブで jdbc ドライバの jar ファイルを指定
Common タブでドライバークラス、データベースのURL等を指定

database に テーブルを作成してみましょう。
cray database modeling で作成したSQLを実行しましょう。
java パースペクティブで xxx.sql を開いて、MenuBar > SQL > Exqute
DbEdit パースペクティブに戻って、database に tabale が追加されたことを確認します。

Tables View を右クリックしてコンテキストメニューから Table を選択すると、新規テーブルの作成もできます。
テーブルをダブルクリックして「Ins」キーを押せば、1行挿入されますので、編集して右クリックのApply Insert でdatabase に書き込むこともできます。
また、すでにデータの入っているデータベースに接続すると、テーブルとその内容の表示、表示されたデータの変更などができます。
頻繁に使う機会はないかもしれませんが、あると便利です。
http://dbcopy.sourceforge.net/en/dbcopy/
ライセンス: OSL 1.1
上記からアーカイブをダウンロードして展開:
最新版は de.jcon.dbcopy_0.1.6.zip リリース 2004-07-05
「設定」> 「DB Copy」> 「JDBC Driver」 を選択し、JDBCのライブラリを設定

同じく DB の情報を登録します。 少なくとも、コピー元とコピー先の2つは必要です。( New )

テーブルをコピーしてみましょう
新規→DB Copy-> Copy jdbc database...
コピー元のDB(左) 、 コピー先のDB(右)
コピーしたい Table を選択して >
Create Tables に チェック して 次 ....

できましたか? DbEdit などでコピー先のデータを確認してみましょう。
Hibernate に関連するコードを作成するツールです。例えば、データベースのスキーマから Hibernate のマッピングファイルを生成してくれます。そしてマッピングファイルから Value Object や DAO を生成することができます。デフォルトの設定では、マッピングファイルからソースコードを生成後、マッピングファイルを変更すると、ソースコードに自動的に反映されます。また、 マッピングファイルの編集を行うためのエディタはコードアシスト機能があります。
http://www.binamics.com/hibernatesynch/ ライセンス:
GPL Version2
ソフトウェアの更新: http://www.binamics.com/hibernatesync 2005/06/03
時点の最新バージョンは 2.3.1 です。
今回は Hibernate2 を ダウンロードして適当なディレクトリに展開します。 http://www.hibernate.org/
2005/06/03 時点の最新バージョンは
Hibernat3. 3.0.5 2005/05/25 リリース
Hibernat2. 2.1.8 2005/01/30 リリース
新規 Java プロジェクトを 以下の構成で作成します。

Hibernate を展開したディレクトリから 必要なライブラリを lib にコピーします。展開したディレクトリの lib/README.txt に各ライブラリの簡単な説明があります。 required になっているものはデフォルトで必要です。 以下のものをコピーします。
| hibernate2.jar | Hibernate |
| ehcache-0.9.jar | EHCache cache |
| jta.jar | Standard JTA API |
| xml-apis.jar | Standard JAXP API |
| commons-logging-1.0.4.jar | Commons Logging |
| dom4j-1.4.jar | XML configuration & mapping parser |
| cglib-full-2.0.2.jar | CGLIB bytecode generator |
| jdbc2_0-stdext.jar | Standard Extension JDBC APIs |
| commons-collections-2.1.1.jar | Commons Collections |
| odmg-3.0.jar | ODMG API |
コピーしたら、ライブラリをクラスパスに追加します。mySQLのjdbc ドライバーにもパスを通します。また、Hibernate を展開したディレクトリの etc/log4j.properties を config にコピーします。次に、データベースに接続するために、config fileを作成します。新規→Hibernate Configureation File :結果として hibernate.cfg.xml ができます。
![]() |
|
ウィザードで設定した内容が hibernate.cfg.xml に書き込まれていると思います。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"> <hibernate-configuration> <session-factory > <!-- local connection properties -->
<property name="hibernate.connection.url">jdbc:mysql://localhost/test</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">mysql</property>
<property name="hibernate.connection.password">mysql</property>
<!-- property name="hibernate.connection.pool_size"></property --> <!-- dialect for MySQL -->
<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property> <property name="hibernate.show_sql">false</property>
<property name="hibernate.use_outer_join">true</property>
<property name="hibernate.transaction.factory_class"> net.sf.hibernate.transaction.JTATransactionFactory</property> <property name="jta.UserTransaction">java:comp/UserTransaction</property>
</session-factory>
</hibernate-configuration>
データベースの内容から、マッピングファイルを作成してみましょう。
新規 → Hibernate Mapping File
![]() |
|
Properties タブ
![]() |
|
テーブル構成
mysql> show columns from member;
+------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| MEMBER_ID | int(11) | | PRI | 0 | |
| NAME | char(10) | YES | | NULL | |
| PROJECT_NO | int(11) | YES | | NULL | |
+------------+----------+------+-----+---------+-------+Member.hbm
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" > <hibernate-mapping package="comware">
<class name="Member" table="member">
<id
column="MEMBER_ID"
name="Id"
type="integer"
>
generator class="vm" />
</id>
<property
column="PROJECT_NO"
name="ProjectNo"
type="integer"
not-null="false"
length="11"
/>
<property
column="NAME"
length="10"
name="Name"
not-null="false"
type="string"
/>
<set inverse="true" name="ProjectSet">
<key column="MEMBER_ID" />
<one-to-many class="Project" />
</set>
</class>
</hibernate-mapping>
さらに hibernate.cfg.xml に今作成したマッピングファイルが追加されます。
:
:
<mapping resource="Project.hbm" />
<mapping resource="Member.hbm" />
</session-factory>
</hibernate-configuration>
マッピングファイルを右クリックして、Hibernate Synchronizer > Synchronize File を選択すると Java のソースコードが作成されます。
![]() |
|
Member テーブルと project テーブルについて、以下のようにソースコードが作成されます。

Memberクラス関連の継承関係は以下のようになります。左側がValue Object 右側が DAO です。

以下のようなテストクラスを作成するとデータベースの内容が参照できます。
: 省略 : public static void main(String[] args) { try { _RootDAO.initialize(); // configu file をロードし SessionFactory を作成 MemberDAO dao = new MemberDAO(); List members = dao.findAll(); // session の open もこの時 for (ListIterator lite = members.listIterator(); lite.hasNext();) { Member member = (Member) lite.next(); System.out.println("ID = " + member.getId() + ", Name = " + member.getName()); } Integer id = new Integer(1); Member member = dao.load(id); System.out.println(member.getName()); : :
Hibernate Synchronizer ではソースコードの作成に Jakarta Project の Velocity を使っています。 Velocity テンプレート言語 (VTL) のリファレンスはそちらを参照願います。また、Synchroniser の HP で Struts の Template が公開されています。 まず、ワークスペースにテンプレートを作成します。そしてプロジェクトテンプレートとしてそれを登録しておきます。するとコードを作成する時にテンプレートが適用されます。
_BaseRootDAOの例( 組み込みTemplate )
package ${class.BaseDAOPackageName}; <--- HibernateClass.getBaseDAOPackageName()APIを参照
import java.io.Serializable;
import java.math.BigDecimal;
:
省略
:
public abstract class _BaseRootDAO {
$snippet.BaseRootDAOSessionMethods <----- snippet の利用
/**
* Return the name of the configuration file to be used with this DAO or null if default
*/
public String getConfigurationFileName () {
return null;
}
:
:
}
ワークスペースにTemplate を作成: ウィンドウ → 設定 → Hibernate Synchronizer
![]() |
|
Snippets タブ ( template で使用する 部品, template )

Edit の画面 ( BaseClassComments の例)
プロジェクトテンプレートの登録:プロジェクトのプロパティー → Hibernate Synchronizer → Templates
![]() |
以前 Export したプロジェクトテンプレートをインポートします | |
| 新たにプロジェクトテンプレートを作成します | ||
| ワークスペースに作成した template から使用するテンプレートを選択します | ||
| クラス名を指定する。Velocity変数を使ってもよい(ファイル名になる) | ||
| パッケージ名を指定する。Velocity変数を使ってもよい(作成場所の指定) | ||
| 上書きします | ||
| 内容をセーブ | ||
| テンプレートで使用する Context parameter を作成できます | ||
| テンプレートで使用する Context object を指定できます テンプレートで使う時は ${obj} で使用します |
後はマッピングファイルを指定して、Synchronize File または Template Genalation でソースコードが作成されます。
プロジェクトのプロパティー → Hibernate Synchronizer → General ( value object )
![]() |
|
|||||||||||||||||||
Data Access object
![]() |
|
HQLの実行やマッピングファイルの生成ができます。
http://hibernator.sourceforge.net/ ライセンス:
LGPL Version 2.1
http://sourceforge.net/projects/hibernator
から hibernator-0.9.6.zip をダウンロード リリース 2003-11-02
* 現在のリリースでは Hibernate2 までの対応です。
データベースへの接続設定
Hibernatorのパースペクティブを開く。
Connection Viewのウィンドウで右クリックして出てくるメニューから「Add」を選択します。
プロジェクトを選択すると以下のようにプロジェクトに存在するマッピングファイルが表示されます。次を選択します。

データベースへの接続情報を入力して終了を選択

Connection View で今、作成した Connection を右クリック > Connect !
ログウィンドウでエラーが出ていないことを確認します。

プロジェクトに同じマッピングファイル名があると違うディレクトリにあっても
Connect ! でエラーになります。また、マッピングファイルにlazy="true"があると、Result が表示されません。
データベースに接続されたら、HQLの実行ができます。
Query View ウィンドウに HQL を入れて Excute を押すと、結果が Result View に表示されます。

また、java パース−スペクティブに戻って、Hibernator の View を開きます。ウィンドウ>ビューの表示>その他>Hibernator
Hibernator Viewが開いた状態で java のソースをエディタで通常のように開くと、マッピングのイメージが View に表示されます。そして、i
マークをクリックするとファイルにセーブされます。

現状、マッピングファイルの class
属性は完全修飾名を指定していないと、classNotFoundException になってしまいます。Hibernate Synchronizer で作ったマッピングファイルは
class 属性が完全修飾名でないので、注意が必要です。