CRUD操作のためのクラスを作成
Entityマネージャを生成
プロジェクトの作成で骨格のみ作成したJPAStandaloneクラスでmeigaraテーブルのCRUD操作が行えるよう実装します。今回はJavaアプリケーションとして実装するため、Webアプリケーションサーバの恩恵を受けることはできません。表1.JPAプレイヤーズ一覧のプレイヤーを意識しつつの実装となります。
CRUD操作を行うためにはEntityマネージャが必要ですが、Entityマネージャを生成するには、Entityマネージャファクトリを生成する必要があります。ここで先述の持続性ユニットが必要になります。リスト3がEntityマネージャを得るコードです。
001: // Entityマネージャファクトリを生成する
002: EntityManagerFactory entityManagerFactory
003: = Persistence.createEntityManagerFactory("JPASample01PU");
004: // Entityマネージャを生成する
005: EntityManager entityManager = entityManagerFactory.createEntityManager();
Entityトランザクションの開始、終了
リスト4がEntityトランザクションをEntityマネージャから取得し、トランザクションの開始、終了をするためのコードです。トランザクションの終了はコミットかロールバックで終了します。当記事ではロールバックの処理は記述しませんが、実際には、要件にしたがって適宜ロールバックを入れてください。
001: // Entityトランザクションを取得し、トランザクションを開始する 002: EntityTransaction entityTransaction = entityManager.getTransaction(); 003: entityTransaction.begin(); 004: // beginとcommitの間にCRUD操作を記述する 005: // トランザクションをコミットする 006: entityTransaction.commit(); 007: // Entityマナーじゃをクローズする 008: entityManager.close();
テーブルに1件挿入
リスト4の4行目にも書いていますが、CRUD操作はトランザクションのbeginとcommitの間に記述します。それではCRUD操作を確認するためのコードを作成します。まずは既存のmeigaraテーブルに1件新しいレコードを追加します。リスト5が銘柄を1レコード追加するためのコードです。
001: Meigara meigara = new Meigara(0, "千鶴", "ちづる", 25, "白", "黄金千貫", "神酒造", 1.8f, 1946); 002: entityManager.persist(meigara);
非常にシンプルです。
1行目でmeigaraテーブルに対応するmeigaraというEntityオブジェクトを生成し、2行目でEntityマネージャのpersistメソッドの引数として渡します。1行目の第1引数に0を設定しているのはmeigaraテーブルのidフィールドをAUTO_INCREMENTに設定しているためです。この時点ではまだmeigaraテーブルに挿入されませんが、トランザクションのコミット処理でmeigaraテーブルに追加されます。
ここまでのJPAStandaloneクラスのコードはリスト6のようになります。また、このクラスを実行する前のmeigaraテーブルの内容は図4の通りです。
001:package jp.kawakubo;
002:
003:import javax.persistence.EntityManager;
004:import javax.persistence.EntityManagerFactory;
005:import javax.persistence.EntityTransaction;
006:import javax.persistence.Persistence;
007:
008:public class JPAStandalone {
009:
010: public static void main(String[] args) {
011: // Entityマネージャファクトリを生成する
012: EntityManagerFactory entityManagerFactory
013: = Persistence.createEntityManagerFactory("JPASample01PU");
014: // Entityマネージャを生成する
015: EntityManager entityManager = entityManagerFactory.createEntityManager();
016:
017: // Entityトランザクションを取得し、トランザクションを開始する
018: EntityTransaction entityTransaction = entityManager.getTransaction();
019: entityTransaction.begin();
020: // beginとcommitの間にCRUD操作を記述する
021: Meigara meigara = new Meigara(0, "千鶴", "ちづる", 25, "白", "黄金千貫", "神酒造", 1.8f, 1946);
022: entityManager.persist(meigara);
023: // トランザクションをコミットする
024: entityTransaction.commit();
025: // Entityマネージャをクローズする
026: entityManager.close();
027:
028: }
029:}
JPAStandaloneを実行する準備ができましたが、他のCRUD操作を確認するためのクラスも作成するため、JPAStandaloneからJPAInsertStandaloneクラスに名前を変更します。
NetBeansの[プロジェクト]タブで、JPAStandaloneクラスを右クリックし、[リファクタリング]-[名前を変更]を選択すると[名前を変更]画面が表示されます。[新しい名前]に「JPAInsertStandalone」と入力し[リファクタリング]ボタンをクリックすると名称が変更されます。
meigaraテーブルへ1件追加
実行はいたって簡単です。JPAInsertStandaloneを右クリックし[ファイルを実行]を選択すると実行されます。実行した結果のmeigaraテーブルの内容は図5の通りで、idが9であるレコードが1件追加されているのが確認できます。
図5はMySQL Workbenchの画面キャプチャですが、CRUD操作ごとに確認するのは大変なので、検索用のメソッドを作成し表示するのが簡単ですが、JPQLを説明しないと分かりづらいため、当記事では実装しません。JPQLについては後編で説明します。今回はMySQL Workbenchの画面キャプチャで内容を確認します。


