SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

今からでも遅くない、JPAを学ぼう!

今からでも遅くない JPAを学ぼう!(前編)
O/Rマッピングフレームワークへの招待

O/Rマッパーを体験しましょう

ダウンロード サンプルコード (5.3 KB)

CRUD操作のためのクラスを作成

Entityマネージャを生成

 プロジェクトの作成で骨格のみ作成したJPAStandaloneクラスでmeigaraテーブルのCRUD操作が行えるよう実装します。今回はJavaアプリケーションとして実装するため、Webアプリケーションサーバの恩恵を受けることはできません。表1.JPAプレイヤーズ一覧のプレイヤーを意識しつつの実装となります。

 CRUD操作を行うためにはEntityマネージャが必要ですが、Entityマネージャを生成するには、Entityマネージャファクトリを生成する必要があります。ここで先述の持続性ユニットが必要になります。リスト3がEntityマネージャを得るコードです。

リスト3.Entityマネージャを得るコード
001:        // Entityマネージャファクトリを生成する
002:        EntityManagerFactory entityManagerFactory
003:                = Persistence.createEntityManagerFactory("JPASample01PU");
004:        // Entityマネージャを生成する
005:        EntityManager entityManager = entityManagerFactory.createEntityManager();
Entityトランザクションの開始、終了

 リスト4がEntityトランザクションをEntityマネージャから取得し、トランザクションの開始、終了をするためのコードです。トランザクションの終了はコミットかロールバックで終了します。当記事ではロールバックの処理は記述しませんが、実際には、要件にしたがって適宜ロールバックを入れてください。

リスト4.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レコード追加するためのコードです。

リスト5.挿入のためのコード
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の通りです。

リスト6.JPAStandalone挿入確認版
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:}
図4.meigaraテーブルの内容
図4.meigaraテーブルの内容

 JPAStandaloneを実行する準備ができましたが、他のCRUD操作を確認するためのクラスも作成するため、JPAStandaloneからJPAInsertStandaloneクラスに名前を変更します。

 NetBeansの[プロジェクト]タブで、JPAStandaloneクラスを右クリックし、[リファクタリング]-[名前を変更]を選択すると[名前を変更]画面が表示されます。[新しい名前]に「JPAInsertStandalone」と入力し[リファクタリング]ボタンをクリックすると名称が変更されます。

meigaraテーブルへ1件追加

 実行はいたって簡単です。JPAInsertStandaloneを右クリックし[ファイルを実行]を選択すると実行されます。実行した結果のmeigaraテーブルの内容は図5の通りで、idが9であるレコードが1件追加されているのが確認できます。

図5.挿入後のmeigaraテーブルの内容
図5.挿入後のmeigaraテーブルの内容

 図5はMySQL Workbenchの画面キャプチャですが、CRUD操作ごとに確認するのは大変なので、検索用のメソッドを作成し表示するのが簡単ですが、JPQLを説明しないと分かりづらいため、当記事では実装しません。JPQLについては後編で説明します。今回はMySQL Workbenchの画面キャプチャで内容を確認します。

次のページ
おさらい

この記事は参考になりましたか?

今からでも遅くない、JPAを学ぼう!連載記事一覧
この記事の著者

川久保 智晴(カワクボ トモハル)

haruプログラミング教室(https://haru-idea.jp/)主宰。COBOL、FORTRANで13年、Javaを中心としたWeb開発で11年。3つしか言語知らないのかというとそうでもなく、sed/awk、Perl、Python, PHP,  C#, JavaScriptなども一時期は業...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5041 2010/04/27 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー