Hibernate を使用した Maven Swing アプリケーションの作成 - NetBeans IDE チュートリアル
このチュートリアルでは、NetBeans IDE を使用して、Maven の原型から Java Swing アプリケーションを作成します。このアプリケーションでは Hibernate フレームワークを持続性レイヤーとして使用し、リレーショナルデータベースから POJO (plain old Java objects) を取得します。このチュートリアルでは、IDE のウィザードを使用して必要な Hibernate ファイルを作成し、Hibernate の依存リソースを POM に追加する方法をデモンストレーションします。Java オブジェクトを作成し、Hibernate を使用するようにアプリケーションを構成したあと、データを検索および表示する GUI インタフェースを作成します。
Maven のサポートは NetBeans IDE に完全に統合され、Maven 3 は NetBeans IDE 7.0 以降の IDE にバンドルされています。バンドルされた Maven の原型から、または「新規プロジェクト」ウィザード内のリモートリポジトリの原型からアプリケーションを作成できます。「Maven リポジトリブラウザ」では、ローカルおよびリモートの Maven リポジトリの操作、アーティファクトの調査、プロジェクトの POM へのプロジェクト依存リソースの追加を行えます。
Ant を使用してこのアプリケーションを構築するには、「Java Swing アプリケーションでの Hibernate の使用」を参照してください。
Maven Java EE アプリケーションを構築するには、「Maven を使用したエンタープライズアプリケーションの作成」を参照してください。
目次
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
このチュートリアルを開始する前に、必要に応じて次のドキュメントをお読みください。
完了したプロジェクトの ZIP アーカイブはダウンロードできます。
データベースの作成
このチュートリアルでは、sakila という名前の MySQL データベースを使用します。IDE のインストールにはサンプルデータベースが含まれていないため、このチュートリアルを開始する前に、まずデータベースを作成する必要があります。
Sakila データベースは、MySQL のサイトから入手できる、無料の MySQL サンプルデータベースです。sakila データベースを作成するには、プラグインマネージャーを使用して Sakila サンプルデータベースプラグインをダウンロードしてインストールできます。プラグインのインストール後、「サービス」ウィンドウから Sakila データベースを作成できます。Sakila データベースは、「MySQL データベースの作成」ダイアログのデータベース一覧に追加されます。
MySQL を操作するための IDE の構成については、「MySQL データベースへの接続」チュートリアルを参照してください。
- プラグインマネージャーを開き、Sakila サンプルデータベースプラグインをインストールします。
- プラグインをインストールしたあと、「サービス」ウィンドウで「データベース」ノードを展開し、「MySQL サーバー」ノードを右クリックして「起動」を選択して、MySQL データベースサーバーを起動します。
- 「MySQL サーバー」ノードを右クリックし、「データベースを作成」を選択します。
- 「MySQL データベースの作成」ダイアログで「新規データベース名」ドロップダウンリストから「Sakila データベース」を選択します。「了解」をクリックします。
「了解」をクリックすると、Sakila データベースを作成し、データベース表を生成するためのスクリプトが IDE によって実行されます。スクリプトを実行した結果は、「出力」ウィンドウで確認できます。「MySQL サーバー」ノードの下に Sakila データベースのノードも追加されます。
- 「Sakila」ノードを右クリックし、「接続」を選択します。
「接続」をクリックすると、Sakila データベースのデータベース接続ノード (jdbc:mysql://localhost:3306/sakila [デフォルトのユーザー名]) が「データベース」ノードの下に一覧表示されます。接続が開いたら、接続ノードを展開してデータベースのデータを確認できます。
Maven の構成
以前に IDE で Maven プロジェクトを作成したことがない場合は、最初に IDE で Maven モジュールを有効化する必要があります。これは、「新規プロジェクト」ウィザードで Maven プロジェクトの原型を選択することによって実行できます。原型を選択すると、IDE によって、このモジュールが自動的に有効にされます。IDE で Maven を有効にするために、このウィザードを完了する必要はありません。
これがはじめての Maven プロジェクトである場合は、「オプション」ウィンドウで Maven の構成設定を確認します。このチュートリアルを完了するには、ローカルシステムに Maven がインストールされている必要があります。NetBeans IDE 7.0 または 7.1 を使用している場合、Maven は IDE にバンドルされており、IDE をインストールするとインストールされます。以前のバージョンの IDE を使用している場合は、Maven のサイトからインストーラをダウンロードできます。
- 「オプション」ウィンドウの「その他」カテゴリを選択して、「Maven」タブをクリックします。
- 「Maven のホーム」が指定されていることを確認します。
NetBeans IDE 7.0 で IDE にバンドルされ、デフォルトで指定されている Maven 3 インストールを使用するか、または Maven のローカルインストールの場所を指定することができます (2.0.9 以降が必要です)。
- Maven のローカルリポジトリの場所が正しいことを確認します。
- 「了解」をクリックします。
Maven リポジトリの表示
Maven ですべてのプロジェクトを構築するために使用されるアーティファクトは、Maven のローカルリポジトリに格納されます。アーティファクトがプロジェクトの依存リソースとして宣言されると、そのアーティファクトは登録されたリモートリポジトリの 1 つからローカルリポジトリにダウンロードされます。
デフォルトで、よく知られているインデックス付きの Maven リポジトリがいくつか登録され、リポジトリブラウザに一覧表示されます。登録されたリポジトリには、プロジェクトの構築に必要な、ほとんどの公開アーティファクトが含まれています。ほとんどの場合、プライベートリポジトリにのみに存在するアーティファクトがプロジェクトで必要にならないかぎり、追加のリポジトリを登録する必要はありません。
Maven リポジトリブラウザを使用すると、ローカルリポジトリとリモートリポジトリの内容を確認することができます。ローカルリポジトリまたはリモートリポジトリにあるアーティファクトは、プロジェクトの依存リソースとして追加することができます。「ローカルリポジトリ」ノードを展開すると、ローカルにあるアーティファクトを表示できます。リモートリポジトリノードの下に一覧表示されているアーティファクトは、プロジェクトの依存リソースとして追加することができますが、すべてのアーティファクトがローカルにあるわけではありません。これらはプロジェクトの依存リソースとして宣言されたときにだけ、ローカルリポジトリに追加されます。
Maven リポジトリブラウザを開くには、次の手順に従います。
- メインメニューから「ウィンドウ」>「その他」>「Maven リポジトリブラウザ」を選択します。
カーソルをアーティファクトの上に置くと、アーティファクトのコーディネートとともにツールチップが表示されます。ブラウザで、アーティファクトの JAR ファイルをダブルクリックすると、アーティファクトについての追加の詳細情報を確認できます。
Maven リポジトリブラウザのツールバーにある「検索」ボタンをクリックするか、メインツールバーにあるクイック検索のテキストフィールドを使用すると、アーティファクトを検索できます。
IDE での Maven のクラスパス依存リソースの管理、および Maven リポジトリの操作についての詳細は、「NetBeans IDE での Apache Maven のベストプラクティス」の「依存リソースの管理」の節を参照してください。
Artifact Viewer の使用方法のデモンストレーションを確認するには、「Maven 依存リソースの操作」のスクリーンキャストを参照してください。
Maven アプリケーションの作成
このチュートリアルでは、DVDStoreAdmin という名前の、簡単な Java Swing アプリケーションプロジェクトを作成します。バンドルされた Maven の原型の 1 つからプロジェクトを作成し、デフォルトのプロジェクト設定を変更します。
原型の選択
新規プロジェクトウィザードを使用すると、Maven 原型から Maven プロジェクトを作成できます。IDE には、一般的な NetBeans プロジェクトタイプ用のいくつかの原型が含まれていますが、ウィザードでリモートリポジトリにある原型を検索して選択することもできます。この課題では、プロジェクトテンプレートとして Maven クイックスタート原型を使用します。
- 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択します。
- 「Maven」カテゴリから「Java アプリケーション」を選択します。「次へ」をクリックします。
注: NetBeans IDE 6.9 以前を使用している場合は、「Maven」カテゴリから「Maven プロジェクト」を選択し、ウィザードの次のパネルで「Maven クイックスタート原型」を選択します。

- プロジェクト名に「DVDStoreAdmin」と入力し、プロジェクトの場所を設定します。
- デフォルトの「グループ ID」と「バージョン」を変更します (省略可能)。
プロジェクトの構築時に、ローカルリポジトリのアーティファクトのコーディネートとして「グループ ID」と「バージョン」が使用されます。
- 「完了」をクリックします。
「完了」をクリックすると、IDE が Maven プロジェクトを作成し、そのプロジェクトが「プロジェクト」ウィンドウで開きます。IDE は、dvdstoreadmin パッケージに App.java クラスを自動的に作成します。アプリケーションでは必要ないため、App.java は削除してかまいません。
注: はじめて Maven プロジェクトを作成する場合は、いくつかの必須プラグインとアーティファクトをローカルリポジトリにダウンロードする必要があります。これにはある程度の時間がかかります。
プロジェクトプロパティーの変更
ウィザードを使用して Maven プロジェクトを作成する場合、デフォルトのプロジェクトプロパティーは原型に基づいています。場合によっては、システム要件やプロジェクト要件に合わせて、デフォルトのプロパティーの変更が必要になることがあります。たとえば、このプロジェクトの場合は、プロジェクトで注釈が使用されるため、ソースレベルが 1.5 に設定されていることを確認する場合があります。
- プロジェクトノードを右クリックし、「プロパティー」を選択します。
- 「プロパティー」ウィンドウで「ソース」カテゴリを選択します。
- 「ソース/バイナリ形式」プロパティーには、ドロップダウンリストから「1.5」を選択します。
- 「エンコーディング」プロパティーには、ドロップダウンリストから「UTF-8」を選択します。「了解」をクリックします。
Hibernate のファイルと依存リソースの追加
Hibernate に対するサポートを追加するには、必要なアーティファクトを POM で依存リソースとして宣言することで、Hibernate ライブラリを使用可能にする必要があります。IDE には、プロジェクトに必要な Hibernate ファイルの作成に役立つウィザードが複数用意されています。IDE のウィザードを使用し、Hibernate 構成ファイルとユーティリティーヘルパークラスを作成できます。ウィザードを使用して Hibernate 構成ファイルを作成すると、自動的に POM が更新され、Hibernate の依存リソースがプロジェクトに追加されます。
プロジェクトへの依存リソースの追加は、「プロジェクト」ウィンドウで行うか、または pom.xml を直接編集して行います。「プロジェクト」ウィンドウで依存リソースを追加するには、「プロジェクト」ウィンドウの「ライブラリ」ノードを右クリックし、ポップアップメニューから「依存リソースを追加」を選択して「依存リソースを追加」ダイアログを開きます。依存リソースを追加すると、POM が更新され、まだローカルにない必須のアーティファクトがローカルリポジトリにダウンロードされます。
pom.xml を直接編集するには、「プロジェクト」ウィンドウで「プロジェクトファイル」ノードを展開し、pom.xml をダブルクリックしてファイルを開きます。
Hibernate 構成ファイルの作成
Hibernate 構成ファイル (hibernate.cfg.xml) には、データベース接続、リソースマッピング、およびそのほかの接続プロパティーに関する情報が格納されます。ウィザードを使用して Hibernate 構成ファイルを作成する場合、IDE に登録されているデータベース接続のリストからデータベース接続を指定します。構成ファイルを生成すると、接続の詳細および選択したデータベース接続に基づくダイアレクト情報が自動的に追加されます。さらに、必須の Hibernate 依存リソースを追加するように POM が自動的に変更されます。構成ファイルの作成後、ファイルはマルチビューエディタを使用して編集するか、または XML エディタで直接 XML を編集できます。
- 「サービス」ウィンドウで Sakila データベース接続を右クリックし、「接続」を選択します。
- 「プロジェクト」ウィンドウで「ソースパッケージ」ノードを右クリックし、「新規」>「その他」を選択して「新規ファイル」ウィザードを開きます。
- 「Hibernate」カテゴリから「Hibernate 構成ウィザード」を選択します。「次へ」をクリックします。
- デフォルトのファイル名 (hibernate.cfg) をそのまま使用します。
- 「参照」をクリックし、「場所」として src/main/resources ディレクトリを指定します (まだ指定されていない場合)。「次へ」をクリックします。
- Sakila 接続を「データベース接続」ドロップダウンリストから選択します。「完了」をクリックします。
「完了」をクリックすると、エディタに hibernate.cfg.xml が表示されます。構成ファイルには、単一のデータベースに関する情報が含まれます。
「プロジェクト」ウィンドウで「依存リソース」ノードを展開すると、必要な Hibernate アーティファクトが IDE によって追加されたことがわかります。IDE によって、プロジェクトをコンパイルするために必要な直接および推移的な依存リソースが、「依存リソース」ノードの下にすべて一覧表示されます。直接の依存リソースであるアーティファクト (プロジェクトの POM で指定された依存リソース) は、色付きの JAR アイコンで示されます。アーティファクトが推移的な依存リソース (直接依存リソースの 1 つまたは複数の依存リソースであるアーティファクト) の場合は灰色で表示されます。
JAR を右クリックし、「アーティファクトの詳細を表示」を選択すると、アーティファクトの詳細を確認できます。Artifact Viewer には、選択されたアーティファクトに関する詳細情報を示すタブが含まれています。たとえば、「基本」タブは、アーティファクトのコーディネートと使用可能なバージョンに関する詳細を示します。「グラフ」タブは、選択したアーティファクトの依存リソースを視覚的に表現します。
「グラフ」タブを使用して、依存リソース間のバージョン競合を検出し、解決することもできます。
Hibernate 構成ファイルの変更
この課題では、hibernate.cfg.xml で指定されたデフォルトプロパティーを、SQL 文のデバッグログ記録が有効になるように編集します。この課題は任意です。
- 「デザイン」タブで hibernate.cfg.xml を開きます。このファイルを開くには、「プロジェクト」ウィンドウでプロジェクトの「構成ファイル」ノードを展開し、hibernate.cfg.xml をダブルクリックします。
- 「オプションのプロパティー」の下の「構成プロパティー」ノードを展開します。
- 「追加」をクリックして「Hibernate プロパティーを追加」ダイアログを開きます。
- このダイアログで、「hibernate.show_sql」プロパティーを選択し、値を「true」に設定します。「了解」をクリックします。これにより、SQL 文のデバッグログ記録が有効になります。

- 「その他のプロパティー」ノードの下にある「追加」をクリックし、「プロパティー名」ドロップダウンリストで「hibernate.query.factory_class」を選択します。
- 「プロパティー値」として「org.hibernate.hql.classic.ClassicQueryTranslatorFactory」と入力します。「了解」をクリックします。
エディタの「XML」タブをクリックすると、ファイルが XML ビューに表示されます。ファイルの内容は次のようになります。
<hibernate-configuration>
<session-factory name="session1">
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sakila</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">######</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
</session-factory>
</hibernate-configuration>
- 変更内容をファイルに保存します。
プロジェクトを実行すると、IDE の出力ウィンドウに SQL クエリーが表示されます。
HibernateUtil.java ヘルパーファイルの作成
Hibernate を使用するには、起動を処理し、Hibernate の SessionFactory にアクセスしてセッションオブジェクトを取得するヘルパークラスを作成する必要があります。このクラスは、Hibernate の configure() メソッドを呼び出し、hibernate.cfg.xml 構成ファイルを読み込み、次に SessionFactory を構築してセッションオブジェクトを取得します。
この節では、「新規ファイル」ウィザードを使用してヘルパークラスである HibernateUtil.java を作成します。
- 「ソースパッケージ」ノードを右クリックし、「新規」>「その他」を選択して「新規ファイル」ウィザードを開きます。
- 「カテゴリ」の一覧から「Hibernate」を選択し、「ファイルの種類」の一覧から「HibernateUtil.java」を選択します。「次へ」をクリックします。
- クラス名として「HibernateUtil」を入力し、パッケージ名として「sakila.util」を入力します。「完了」をクリックします。
「完了」をクリックすると、HibernateUtil.java がエディタに表示されます。このファイルは、編集する必要がないため閉じて構いません。
Hibernate のマッピングファイルおよび Java クラスの生成
このチュートリアルでは、POJO (Plain Old Java Objects) である Actor.java を使用してデータベース内の ACTOR 表のデータを表示します。このクラスは、表内の列のフィールドを指定し、データを取得および書き込みするための単純な取得メソッドおよび設定メソッドを使用します。Actor.java を ACTOR 表にマップするには、Hibernate のマッピングファイルを使用するか、クラスの注釈を使用します。
「リバースエンジニアリング」ウィザードと「データベースからの Hibernate のマッピングファイルと POJO」ウィザードを使用して、選択するデータベース表に基づいて複数の POJO とマッピングファイルを作成できます。代わりに、IDE のウィザードを使用して個別の POJO とマッピングファイルを最初から作成することもできます。
注: 複数の表用にファイルを作成する場合は、このウィザードを使用すると便利です。このチュートリアルでは、POJO を 1 つとマッピングファイルを 1 つ作成する必要があるだけなので、ファイルを個々に作成するほうがはるかに簡単です。POJO とマッピングファイルを個別に作成する手順については、このチュートリアルの最後に紹介します。
リバースエンジニアリングファイルの作成
「データベースからの POJO およびマッピングファイル」ウィザードを使用するには、まず、hibernate.cfg.xml を作成した src/main/resources ディレクトリに reveng.xml リバースエンジニアリングファイルを作成する必要があります。
- 「ソースパッケージ」ノードを右クリックし、「新規」>「その他」を選択して「新規ファイル」ウィザードを開きます。
- 「カテゴリ」の一覧から「Hibernate」を選択し、「ファイルの種類」の一覧から「Hibernate リバースエンジニアリングウィザード」を選択します。「次へ」をクリックします。
- ファイル名に「hibernate.reveng」と入力します。
- 場所として src/main/resources を指定します。「次へ」をクリックします。
- 「使用可能な表」区画で actor を選択し、「追加」をクリックします。「完了」をクリックします。
このウィザードにより hibernate.reveng.xml リバースエンジニアリングファイルが生成されます。リバースエンジニアリングファイルは、編集する必要がないため閉じてかまいません。
注: このプロジェクトには、MySQL コネクタ Jar ライブラリ (たとえば、mysql-connector-jar-5.1.13.jar) が必要です。「依存リソース」ノードの下にプロジェクト依存リソースとして適切な JAR が一覧表示されていない場合は、「依存リソース」ノードを右クリックし、「依存リソースを追加」を選択することによって依存リソースを追加できます。
データベースからの Hibernate のマッピングファイルと POJO の作成
「データベースからの Hibernate のマッピングファイルと POJO」ウィザードでデータベース内の表に基づいてファイルを生成します。ウィザードを使用すると、IDE により、hibernate.reveng.xml で指定されたデータベース表に基づいて POJO とマッピングファイルが生成され、マッピングエントリが hibernate.cfg.xml に追加されます。ウィザードを使用する場合、たとえば POJO のみにするなど、IDE で生成するファイルを選択でき、また、たとえば EJB 3 注釈を使用するコードの生成するなど、コード生成オプションを選択できます。
- 「プロジェクト」ウィンドウで「ソースパッケージ」ノードを右クリックし、「新規」>「その他」を選択して「新規ファイル」ウィザードを開きます。
- 「データベースからの Hibernate のマッピングファイルと POJO」を「Hibernate」カテゴリから選択します。「次へ」をクリックします。
- 選択されていない場合、hibernate.cfg.xml を「Hibernate 設定ファイル」ドロップダウンリストから選択します。
- 選択されていない場合、hibernate.reveng.xml を「Hibernate リバースエンジニアリングファイル」ドロップダウンリストから選択します。
- 「ドメインコード」および「Hibernate XML のマッピング」オプションが選択されていることを確認します。
- パッケージ名に「sakila.entity」と入力します。「完了」をクリックします。
「完了」をクリックすると、POJO の Actor.java が、すべての必須フィールドともに src/main/java/sakila/entity ディレクトリに生成されます。また、Hibernate マッピングファイルも src/main/resources/sakila/entity ディレクトリに作成され、マッピングエントリが hibernate.cfg.xml に追加されます。
これで、POJO と必要な Hibernate 関連ファイルが準備できたので、アプリケーションの簡単な Java GUI フロントエンドを作成できます。また、データベースにクエリーを行なってデータを取得する HQL クエリーを作成し、追加できます。また、この過程で HQL エディタを使用してクエリーを構築およびテストします。
アプリケーション GUI の作成
この課題では、データを入力および表示するためのフィールドを含む、簡単な JFrame フォーム作成します。また、データを取得するためのデータベースクエリーをトリガーするボタンを追加します。
GUI ビルダーを使用したフォームを作成に習熟していない場合、「GUI 構築入門」チュートリアルを見直すことをお勧めします。
JFrame フォームの作成
- 「プロジェクト」ウィンドウでプロジェクトノードを右クリックし、「新規」>「その他」を選択して「新規ファイル」ウィザードを開きます。
- JFrame フォームを「Swing GUI フォーム」カテゴリから選択します。「次へ」をクリックします。
- クラス名に「DVDStoreAdmin」と入力し、パッケージ名に「sakila.ui」と入力します。「完了」をクリックします。
「完了」をクリックすると、IDE でクラスが作成され、JFrame フォームがエディタの「デザイン」ビューに開きます。
要素のフォームへの追加
次に、UI 要素をフォームに追加する必要があります。エディタの「デザイン」ビューにフォームが表示されると、IDE の右側に「パレット」が表示されます。要素をフォームに追加するには、要素をパレットからフォーム領域にドラッグします。要素をフォームに追加したあと、その要素の「変数名」プロパティーのデフォルト値を変更する必要があります。
- 「ラベル」要素をパレットからドラッグし、テキストを「俳優のプロフィール」に変更します。
- 「ラベル」要素をパレットからドラッグし、「名」のテキストを変更します。
- 「テキストフィールド」要素を「名」ラベルの隣にドラッグし、デフォルトのテキストを削除します。
デフォルトのテキストを削除すると、テキストフィールドが収縮されます。テキストフィールドは、フォーム要素の位置を調整するために、あとでサイズ変更できます。
- 「ラベル」要素をパレットからドラッグし、「姓」のテキストを変更します。
- 「テキストフィールド」要素を「姓」ラベルの隣にドラッグし、デフォルトのテキストを削除します。
- 「ボタン」要素をパレットからドラッグし、テキストを「クエリー」に変更します。
- 「表」要素をパレットからフォームにドラッグします。
- 次の UI 要素の「変数名」の値を、次の表の値に従って変更します。
要素の「変数名」の値は、その要素を「デザイン」ビューの中で右クリックし、「変数名を変更」を選択することで変更できます。または、「変数名」を「インスペクタ」ウィンドウで直接変更することもできます。
「変数名」値を「ラベル」要素に割り当てる必要はありません。
| 「名」テキストフィールド | firstNameTextField |
| 「姓」テキストフィールド | lastNameTextField |
| 「クエリー」ボタン | queryButton |
| 表 | resultTable |
- テキストフィールドのサイズを変更し、フォーム要素の位置揃えを行います。
テキストフィールドの「水平方向にサイズ変更可能」プロパティーを有効にして、要素間のスペースを維持したまま、テキストフィールドをウィンドウに合わせてサイズ変更することができます。
- 変更を保存します。
デザインビューのフォームは、次の画像のような外観になります。
これで、フォーム要素にイベントを割り当てるためのコードを作成するフォームが準備できました。次の課題では、Hibernate クエリー言語に基づいて、データを取得するクエリーを構築します。クエリーの構築後、「クエリー」ボタンを押したときに適切なクエリーを呼び出すメソッドをフォームに追加します。
HQL クエリーエディタでのクエリーの作成
IDE で、HQL クエリーエディタを使用して Hibernate クエリー言語 (HQL) に基づくクエリーを構築およびテストできます。クエリーを入力すると、それに相当する (変換された) SQL クエリーがエディタに表示されます。ツールバーの「HQL クエリーを実行」ボタンをクリックすると、IDE がクエリーを実行し、エディタ下部に結果が表示されます。
この課題では、HQL エディタを使用して、姓または名の一致に基づいて俳優の詳細リストを取得する、簡単な HQL クエリーを構築します。クエリーをクラスに追加する前に、HQL クエリーエディタを使用して、接続が正しく動作し、クエリーで目的の結果が生成されることをテストします。このクエリーを実行するには、まずアプリケーションをコンパイルする必要があります。
- プロジェクトノードを右クリックし、「構築」を選択します。
「構築」をクリックすると、IDE によって、必要なアーティファクトが Maven のローカルリポジトリにダウンロードされます。
- 「プロジェクト」ウィンドウの「その他のソース」ノードの下にある、<デフォルトパッケージ> ソースパッケージノードを展開します。
- 「hibernate.cfg.xml」を右クリックし、「HQL クエリーを実行」を選択して HQL クエリーエディタを開きます。
- HQL クエリーエディタに「from Actor」と入力して、接続をテストします。ツールバーの「HQL クエリーを実行」ボタン (
) をクリックします。
「HQL クエリーを実行」をクリックすると、クエリー結果が HQL クエリーエディタの下の区画に表示されるはずです。
- 検索文字列が「PE」の場合、次のクエリーを HQL クエリーエディタに入力して「HQL クエリーを実行」をクリックし、クエリーの結果を確認します。
from Actor a where a.firstName like 'PE%'
クエリーによって名前が「PE」で始まる俳優の詳細リストが返されます。
結果の上にある「SQL」ボタンをクリックすると、次のような SQL クエリーが表示されるはずです。
select actor0_.actor_id as col_0_0_ from sakila.actor actor0_ where (actor0_.first_name like 'PE%' )
- 新しい HQL クエリーエディタのタブを開き、次のクエリーをエディタ区画に入力します。「HQL クエリーを実行」をクリックします。
from Actor a where a.lastName like 'MO%'
クエリーによって姓が「MO」で始まる俳優の詳細リストが返されます。
クエリーのテストによって、そのクエリーが目的の結果を返すことがわかります。次の手順では、フォームで「クエリー」ボタンをクリックすると適切なクエリー呼び出されるように、クエリーをアプリケーションに実装します。
クエリーのフォームへの追加
DVDStoreAdmin.java を変更して、クエリー文字列を追加し、入力変数を組み込むクエリーを構築して呼び出すメソッドを作成する必要があります。また、ボタンイベントハンドラを変更して、正しいクエリーを呼び出し、クエリー結果を表に表示するメソッドを追加する必要があります。
- DVDStoreAdmin.java を開き、「ソース」タブをクリックします。
- このクラスに、次のクエリー文字列 (ボールド部分) を追加します。
public DVDStoreAdmin() {
initComponents();
}
private static String QUERY_BASED_ON_FIRST_NAME="from Actor a where a.firstName like '";
private static String QUERY_BASED_ON_LAST_NAME="from Actor a where a.lastName like '";
クエリーを HQL クエリーエディタのタブからファイルにコピーし、コードを変更できます。
- 次のメソッドを追加し、ユーザー入力文字列に基づくクエリーを作成します。
private void runQueryBasedOnFirstName() {
executeHQLQuery(QUERY_BASED_ON_FIRST_NAME + firstNameTextField.getText() + "%'");
}
private void runQueryBasedOnLastName() {
executeHQLQuery(QUERY_BASED_ON_LAST_NAME + lastNameTextField.getText() + "%'");
}
このメソッドは、executeHQLQuery() というメソッドを呼び出し、クエリー文字列とユーザーが入力した検索文字列とを組み合わせてクエリーを作成します。
- executeHQLQuery() メソッドを追加します。
private void executeHQLQuery(String hql) {
try {
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Query q = session.createQuery(hql);
List resultList = q.list();
displayResult(resultList);
session.getTransaction().commit();
} catch (HibernateException he) {
he.printStackTrace();
}
}
executeHQLQuery() メソッドは、Hibernate を呼び出して、選択したクエリーを実行します。このメソッドは、HibernateUtil.java ユーティリティークラスを使用して Hibernate セッションを取得します。
- Hibernate ライブラリ (org.hibernate.Query、org.hibernate.Session) と java.util.List に対するインポート文を追加するように、インポートを修正します。
- デザインビューに切り替えて「クエリー」ボタンをダブルクリックすることで、「クエリー」ボタンイベントハンドラを作成します。
IDE で queryButtonActionPerformed メソッドが作成され、このメソッドがソースビューに表示されます。
- ユーザーがボタンをクリックしたときにクエリーが実行されるよう、ソースビューの queryButtonActionPerformed メソッドに次のコードを追加して変更します。
private void queryButtonActionPerformed(java.awt.event.ActionEvent evt) {
if(!firstNameTextField.getText().trim().equals("")) {
runQueryBasedOnFirstName();
} else if(!lastNameTextField.getText().trim().equals("")) {
runQueryBasedOnLastName();
}
}
- 次のメソッドを追加し、結果が JTable に表示されるようにします。
private void displayResult(List resultList) {
Vector<String> tableHeaders = new Vector<String>();
Vector tableData = new Vector();
tableHeaders.add("ActorId");
tableHeaders.add("FirstName");
tableHeaders.add("LastName");
tableHeaders.add("LastUpdated");
for(Object o : resultList) {
Actor actor = (Actor)o;
Vector<Object> oneRow = new Vector<Object>();
oneRow.add(actor.getActorId());
oneRow.add(actor.getFirstName());
oneRow.add(actor.getLastName());
oneRow.add(actor.getLastUpdate());
tableData.add(oneRow);
}
resultTable.setModel(new DefaultTableModel(tableData, tableHeaders));
}
- java.util.Vector を追加するようにインポートを修正し (Ctrl-Shift-I)、変更内容を保存します。
フォームの保存後、プロジェクトを実行できます。
Maven プロジェクトの実行
これでコーディングが終了したので、プロジェクトを構築してアプリケーションを起動できます。IDE で Maven プロジェクトを構築すると、Maven はプロジェクトの POM を読み取ってプロジェクトの依存リソースを特定します。依存リソースとして指定されたすべてのアーティファクトは、プロジェクトの構築のため、ローカルの Maven リポジトリ内にある必要があります。必須のアーティファクトがローカルリポジトリにない場合、Maven は、プロジェクトを構築および実行する前に、アーティファクトをリモートリポジトリからチェックアウトします。プロジェクトの構築後、Maven は結果のバイナリをアーティファクトとしてローカルリポジトリにインストールします。
注:
- プロジェクトをはじめて構築および実行する際に、任意のプロジェクトの依存リソースをチェックアウトする必要がある場合は、時間がかかることがあります。それ以降の構築は、より速く行えます。
- このアプリケーションを実行するには、Main クラスを指定する必要があります。
このアプリケーションをコンパイルして起動するには、次のタスクを実行します。
- 「プロジェクト」ウィンドウでプロジェクトのノードを右クリックし、「プロパティー」を選択します。
- 「プロジェクトプロパティー」ダイアログで「実行」カテゴリを選択します。
- 「主クラス」に「sakila.ui.DVDStoreAdmin」と入力します。「了解」をクリックします。
または、「参照」ボタンをクリックし、ダイアログで主クラスを選択できます。
- メインツールバーの「主プロジェクトを実行」をクリックし、アプリケーションを起動します。
IDE の Maven プロジェクトで「実行」アクションを呼び出すと、IDE は「実行」アクションに関連付けられた Maven ゴールを実行します。IDE には、プロジェクトのパッケージに応じて IDE のアクションにバインドされたデフォルトのゴールがあります。プロジェクトの「プロパティー」ウィンドウの「アクション」区画で、「実行」アクションにバインドされたゴールを表示できます。
アクションに対するゴールのバインドは、プロジェクトの「プロパティー」ウィンドウにある「アクション」区画でカスタマイズできます。
アプリケーションを起動すると、GUI フォームが表示されます。検索文字列を「名」または「姓」テキストフィールドに入力し、「クエリー」をクリックして俳優を検索し、詳細を確認します。
IDE の「出力」ウィンドウを見ると、表示された結果を取得した SQL クエリーを確認できます。
ソリューションプロジェクトのダウンロード
次の方法で、このチュートリアルにソリューションをプロジェクトとしてダウンロードできます。
- 完了したプロジェクトの ZIP アーカイブをダウンロードします。
- 次の手順を実行して、プロジェクトソースを NetBeans のサンプルからチェックアウトします。
- メインメニューから「チーム」>「Subversion」>「チェックアウト」を選択します。
- 「チェックアウト」ダイアログで次のリポジトリ URL を入力します。
https://svn.netbeans.org/svn/samples~samples-source-code
「次へ」をクリックします。
- 「参照」をクリックして「リポジトリフォルダを参照」ダイアログを開きます。
- ルートノードを展開し、samples/java/DVDStoreAdmin-Maven を選択します。「了解」をクリックします。
- ソースのローカルフォルダを指定します。ローカルフォルダは空である必要があります。
- 「完了」をクリックします。
「完了」をクリックすると、IDE はローカルフォルダを Subversion リポジトリとして初期化し、プロジェクトソースをチェックアウトします。
- チェックアウトが完了するときに表示されるダイアログで、「プロジェクトを開く」をクリックします。
注:
個別の POJO およびマッピングファイルの作成
POJO は単純な Java クラスのため、新規「Java クラス」ウィザードを使用してクラスを作成し、そのクラスをソースエディタで編集して、必要なフィールドや取得メソッドおよび設定メソッドを追加できます。POJO の作成後、ウィザードを使用して Hibernate マッピングファイルを作成し、そのクラスを表にマップしてマッピング情報を hibernate.cfg.xml に追加します。マッピングファイルを最初から作成する場合、XML エディタでフィールドを列にマップする必要があります。
注: この課題は任意であり、「データベースからの Hibernate のマッピングファイルと POJO」ウィザードを使用して作成した POJO とマッピングファイルの作成方法を説明します。
- 「プロジェクト」ウィンドウの「ソースパッケージ」ノードを右クリックし、「新規」>「Java クラス」を選択して「新規 Java クラス」ウィザードを開きます。
- このウィザードで、クラス名に「Actor」と入力し、パッケージに「sakila.entity」と入力します。「完了」をクリックします。
- 次のボールドで表示されている変更をクラスに加え、シリアライズ可能なインタフェースを実装して、表の列のフィールドを追加します。
public class Actor implements Serializable {
private Short actorId;
private String firstName;
private String lastName;
private Date lastUpdate;
}
- フィールドに対する取得メソッドと設定メソッドは、挿入カーソルをソースエディタに置き、Alt-Insert キーを押して「取得メソッドおよび設定メソッド」を選択することで生成します。
- 「取得メソッドおよび設定メソッドの生成」ダイアログですべてのフィールドを選択し、「生成」をクリックします。
「取得メソッドおよび設定メソッドの生成」ダイアログでは、キーボードの上矢印キーを使用して、選択した項目を Actor ノードまで移動してから、スペースバーを押して Actor 内のすべてのフィールドを選択できます。
- インポートを修正して変更内容を保存します。
表のための POJO の作成後、Actor.java の Hibernate マッピングファイルを作成します。
- 「プロジェクト」ウィンドウで「sakila.entity」ノードを右クリックし、「新規」>「その他」を選択して「新規ファイル」ウィザードを開きます。
- 「Hibernate」カテゴリの「Hibernate マッピングウィザード」を選択します。「次へ」をクリックします。
- 「ファイル名」に「Actor.hbm」と入力し、「フォルダ」を src/main/resources/sakila/entity に設定します。「次へ」をクリックします。
- 「マップするクラス」に「sakila.entity.Actor」と入力します。
- 選択されていない場合、actor を「データベース表」ドロップダウンリストから選択します。「完了」をクリックします。
「完了」をクリックすると、Actor.hbm.xml Hibernate のマッピングファイルがソースエディタで開きます。また、IDE でマッピングリソースに対するエントリが hibernate.cfg.xml に自動的に追加されます。このエントリの詳細は、hibernate.cfg.xml のデザインビューで「マッピング」ノードを展開するか、または XML ビューで表示できます。XML ビューの mapping エントリは、次のようになります。
<mapping resource="sakila/entity/Actor.hbm.xml"/>
</session-factory>
</hibernate-configuration>
- 次のボールド部分の変更を Actor.hbm.xml に行なって、Actor.java のフィールドを ACTOR 表の列にマップします。
<hibernate-mapping>
<class name="sakila.entity.Actor" table="actor">
<id name="actorId" type="java.lang.Short">
<column name="actor_id"/>
<generator class="identity"/>
</id>
<property name="firstName" type="string">
<column length="45" name="first_name" not-null="true"/>
</property>
<property name="lastName" type="string">
<column length="45" name="last_name" not-null="true"/>
</property>
<property name="lastUpdate" type="timestamp">
<column length="19" name="last_update" not-null="true"/>
</property>
</class>
</hibernate-mapping>
エディタでコード補完を使用し、マッピングファイルの変更時に値を補うことができます。
注: デフォルトでは、生成される class 要素には終了タグがあります。開始と終了の class 要素タグの間にプロパティー要素を追加する必要があるため、次のボールドの変更を加えます。変更後、class タグの間でコード補完を使用できます。
<hibernate-mapping>
<class name="sakila.entity.Actor" table="actor">
</class>
</hibernate-mapping>
- ツールバーの「XML の妥当性検査」ボタンをクリックし、変更内容を保存します。
POJO と Hibernate のマッピングファイルを個別に作成すると、アプリケーションをさらにカスタマイズするときに役立つ場合があります。
関連項目
Swing GUI アプリケーションの作成に関する追加情報は、次のチュートリアルを参照してください。