SHOEISHA iD

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

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

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

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

更新、削除Javaアプリケーションの作成

 いったん環境さえ整えば、更新や削除のコードを書くのは簡単です。

更新アプリケーションの作成

 JPAInsertStandaloneクラスで挿入したレコードを更新するためのJavaアプリケーションを作成します。作成はいつも通り、[プロジェクト]-[JPASample01]で右クリックして[新規]-[Javaクラス]を選択し、画面が表示されたら[クラス名]に「JPAUpdateStandalone」、[パッケージ]に「jp.kawakubo」と入力します。

 リスト7が更新用のJavaアプリケーションです。本来であれば容量(volume)が900mlで価格(price)が1050円であったが、間違えて入力したためそれを更新する、という仮定でコーディングしています。

リスト7.JPAUpdateStandaloneクラス
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 JPAUpdateStandalone {
009:    public static void main(String[] args) {
010:        // Entityマネージャファクトリを生成する
011:        EntityManagerFactory entityManagerFactory
012:                = Persistence.createEntityManagerFactory("JPASample01PU");
013:        // Entityマネージャを生成する
014:        EntityManager entityManager = entityManagerFactory.createEntityManager();
015:
016:        // Entityトランザクションを取得し、トランザクションを開始する
017:        EntityTransaction entityTransaction = entityManager.getTransaction();
018:        entityTransaction.begin();
019:        // beginとcommitの間にCRUD操作を記述する
020:        // findメソッドでmeigaraテーブルよりMeigaraオブジェクトを取得する
021:        // 第2引数はIdアノテーションで指定したカラムの値
022:        Meigara meigara = entityManager.find(Meigara.class, 9);
023:        meigara.setVolume(0.9f);
024:        meigara.setPrice(1050);
025:        // トランザクションをコミットする
026:        entityTransaction.commit();
027:        // Entityマネージャをクローズする
028:        entityManager.close();
029:
030:    }
031:}

 リスト7の通り、ほとんどJPAInsertStandaloneと同じです。違うのは22から24行目のみです。

 22行目で主キーが9であるレコードからMeigaraオブジェクトを取得します。値の変更は通常のPOJOオブジェクト同様setterメソッドで値を設定するだけです。SQL文がコードに混じりこまず非常に分かりやすいコーディングになっています。

 実行するにはJPAUpdateStandaloneを右クリックし[ファイルを実行]を選択すると実行されます。実行後のmeigaraテーブルの内容は図6の通りです。volumeが0.90に、priceが1050に更新されているのが確認できます。

図6.更新後のmeigaraテーブルの内容
図6.更新後のmeigaraテーブルの内容

削除アプリケーションの作成

 削除アプリケーションの作成も更新アプリケーションとロジックはほとんど変わりません。リスト8はJPADeleteStandaloneという名前で作成した削除アプリケーションのうち、トランザクションのbeginからcommitの間のみ抜粋したものです。削除後のmeigaraテーブルの内容は図7の通りでidが9であるレコードがなくなっているのが確認できます。

リスト8.JPADeleteStandaloneクラス(抜粋)
001:        // findメソッドでmeigaraテーブルよりMeigaraオブジェクトを取得する
002:        Meigara meigara = entityManager.find(Meigara.class, 9);
003:        entityManager.remove(meigara);

 2行目で削除したいレコードのEntityクラスを第1引数に、その主キーを第2引数に設定しMeigaraオブジェクトを取得しています。削除するには取得したオブジェクトをEntityマネージャのremoveメソッドの引数に設定するだけです。

図7.削除後のmeigaraテーブルの内容
図7.削除後のmeigaraテーブルの内容

おさらい

 JPAはO/Rマッパーの違いを隠ぺいするためのAPIです。

 JPAを使ってO/Rマッピングを行うにはJPA関連のjarファイルとJDBCドライバのjarファイルが必要です。今回はマッパーとしてGlassFish内蔵のTopLink Essentialを、データベースとしてMySQLを使用しました。また、それらのjarファイルをライブラリに追加しました。

 CRUD操作を行うためにはEntityマネージャのメソッドを使用します。

  • 挿入の場合、Entityマネージャのpersistメソッドを使用する
  • JPQLを使用する(後編で説明)
  • 更新の場合、更新したいレコードに相当するEntityクラスとその主キーを、Entityマネージャのfindメソッドの引数に設定しEntityオブジェクトを取得する。取得したEntityオブジェクトの更新したいフィールドのsetterメソッドに更新したい値を設定する
  • 削除の場合、削除したいレコードに相当するEntityクラスとその主キーを、Entityマネージャのfindメソッドの引数に設定しEntityオブジェクトを取得する。取得したEntityオブジェクトをEntityマネージャのremoveメソッド引数に設定する

 今回は、1テーブルに対するCRUD操作を行うための実装方法を説明しました。実際のシステムではテーブルは複雑に関連しています。複数のテーブルのCRUD操作については後編で説明します。

サンプルコード

 当記事のプロジェクトのフォルダ構成は図8の通りです。persistence.xmlとソースコード、およびデータベースリストア用のsqlファイルを「サンプルコード」としてページトップに置いています。ダウンロードし解凍してご利用ください。

図8.プロジェクトのフォルダ構成
図8.プロジェクトのフォルダ構成

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
今からでも遅くない、JPAを学ぼう!連載記事一覧
この記事の著者

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5041 2010/04/27 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング