© 2005 by NTT COMWARE CORPORATION; made available under the EPL v1.0
 Eclipse Corner Article

Eclipse を用いた JSF/Spring/Hibernate プラグイン勉強会
2005 / 6 / 17

 データベース関連プラグイン

※ このコンテンツは、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;

Cray Database Modeling: データベースのモデリング

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


DbEdit: データベースを操作できます

データベースの内容を見たり、編集したり、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 に書き込むこともできます。
また、すでにデータの入っているデータベースに接続すると、テーブルとその内容の表示、表示されたデータの変更などができます。


DB Copy : データベースのテーブルをコピー

頻繁に使う機会はないかもしれませんが、あると便利です。

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 Synchronizer : Hibernate の O/Rマッピングファイル作成

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 ができます。

Container: ファイルを作成する場所を指定
/Sample/config

Database Type: MySQL
Driver Class: Browse ボタンを押して 型に Driver を入れ、 com.mysql.mysql.jdbc.Driver を選択
Database URL: jdbc:mysql://localhost/test
Username: mysql
Password:

ウィザードで設定した内容が 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

Configration タブでデーターベース接続の password を入力
Refresh を選択し、データベースのテーブルを読み出す
Tables にテーブル一覧が表示されるので、マッピングを作成する Table にチェックを入れる
パッケージを入力
終了を選択すると table毎に〜.hbm というマッピングファイルが作成されます。
(properties タブで拡張子などを指定できます)
   

Properties タブ

拡張子
複合キーを使用する場合の composite-id のnameを指定
generator-class を指定できます
逆の関連を表すset要素を生成します
Lazy Load を使用します
プロパティの先頭文字を小文字にします
lazy初期化プロキシに使うインターフェイスを指定します
   

作成されるマッピングファイルの例: Member.hbm

テーブル構成

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 のソースコードが作成されます。

hibernate.cfg.xml に <mapping resource="〜.hbm" /> を追加します
自分で作成した Template を元にソースコードを作成します
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

templateファイル(zip形式)をインポートします
新たに ワークスペースにtemplate を作成します
ここで定義したカスタム template を使用してコードを生成する
   
   

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 )

自動で同期を行う ( マッピングファイルがセーブされた時、ソースコードと同期を取る)
自動的に value object を作成する
value object の作成場所を指定します 実装パッケージのサブパッケージに作成します
実装パッケージと関係なく、独自に定義します
同じパッケージに作成します
上記 で指定する Package 名 デフォルトは base
     

Data Access object

自動的に DAOs を作成する
value object と同様に、DAOを作成する場所の指定です
作成場所のデフォルトは dao です
base value object と同じパッケージに base DAOs を作成する
root DAO をプラグインで作成せずに、カスタムDAO ( template ) を使用して作成する
   

Hibernator: HQL ( Hibernate Query Language ) を実行する

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 属性が完全修飾名でないので、注意が必要です。


Javaおよびその他のJavaを含む商標は、米国 Sun Microsystems, Inc. の商標であり、同社のJavaブランドを使用した技術を使用した製品を指します。
Windowsは、米国Microsoft Corporationの米国および その他の国における登録商標です。
Windows の正式名称は、 Microsoft(R) Windows(R) Operating System です。
記載されている製品名、会社名は、それぞれの会社の 登録商標または商標です。