検索
連載

Play frameworkのDB操作を楽にするEBeanの基礎知識Javaの常識を変えるPlay framework入門(2)(2/3 ページ)

PC用表示 関連情報
Share
Tweet
LINE
Hatena

Play frameworkの基本的なDB操作

 「play.db.ebean.Model」には、基本的なDB操作としてINSERT、UPDATE、DELETEが用意されています。

INSERT

 単純なINSERTなら、そのEBeanオブジェクトのsave()メソッドを呼べば、その状態で保存されます。

UPDATE

 UPDATEも、そのEBeanオブジェクトのupdate()メソッドを呼べば、変更した内容で更新されます。

DELETE

 UPDATE同様に対象のオブジェクトのdelete()メソッドを呼べば、そのオブジェクトは削除されます。

SELECT

 Play frameworkでは、検索を行う「play.db.ebean.Model.Finder」クラスが用意されています。このクラスを使うには、以下のようにFinderオブジェクトを作成します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 ここでのLongクラスはPrimary Keyのクラスを表し、Parentクラスは結果として返すクラスを意味します。下記は、このFinderクラスで今回使うメソッドです。

  • all():全件検索を行う
  • byId(Long id):Primary Keyによる検索を行う。引数のクラスはPrimary Keyとして指定したクラス
  • where(String arg):検索条件を指定し、Queryオブジェクトを取得。取得したQueryオブジェクトより、結果を取得

 そのほか、いろいろなメソッドが用意されています。さらに詳しく知りたい場合はPlay frameworkのAPIなどをご確認ください。

Playの再起動は不要! 手軽にDB操作を確認

 DB操作がどのような動きになるのか試しに実装してみましょう。まず、プロジェクトを作成したディレクトリのappフォルダにある「controllers/Application.java」を開いてください。

 そこでindex()メソッドを下記のように書き換えてください。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 実行してみましょう。先ほどの「http://localhost:9000」に再度アクセスしてください。そうすると、実装されているDB操作が行われます。処理が終わると下記のように表示されていると思います。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 作成したParentが保存されているのが確認できましたね。

※ ここではINSERT処理のみを行っているので、このページにアクセスするたびに、同様のレコードを繰り返し作成されるので注意してください。

 次に、parent1のnameを変更し、parent2を削除してみましょう。先ほどのApplication.javaを下記のように修正してください。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 実装後に先ほどの「http://localhost:9000」に再度アクセスしてください。更新されたレコードのnameとupdateDateが更新され、削除されたレコードは表示されないはずです。

※Playの再起動などは不要です。Webブラウザで再度アクセスするだけで十分です。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

親子関係にあるDBデータの操作

 ここまでは、1つのDBテーブルに対してのアクセス方法を説明してきました。しかし、私たちが作成するシステムでは複数のDBテーブルが関係し、親子関係になっていることがほとんどです。次に、親子関係にあるデータについて操作してみましょう。

 今回は1つの親が複数の子を持つだけのシンプルな関連を持つクラスを作成します。最初に下記のような子のクラスを作成してください。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 次にParentクラスに、Childクラスと関連を持つためのプロパティとして、以下のコードを記述してください。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

親子関係にあるDBデータの操作で使うアノテーション

 それでは、新しく出てきたアノテーションを簡単に説明します。

  • Childクラス
    • @ManyToOne:複数の子クラスが1つの親クラスに属することを示す
    • @JoinColumn(name="parent_id"):ChildテーブルがParentテーブルと関連を持つカラムはparent_idであることを示す
  • Parentクラス
    • @OneToMany(cascade = CascadeType.ALL, mappedBy="parent"):Parentクラスが複数のChildクラスを持ち、Childクラスのクラス変数parentで関連することを示し。この"parent"はChildで指定された変数名と一緒でないとエラーになる。また、すべてのオペレーションに対してカスケードされる

親子関係にあるDBデータの作成

 「http://localhost:9000」に再びアクセスしてください。以下のページが表示されます。

 ここにある「Apply this script now!」をクリックすると、ParentのDBテーブルはいったん削除された後に再作成され、ChildのDBテーブルが新たに作成されます。下記は、このとき実行されるSQLです。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 次ページでは、変更したEBeanを使って簡単な親子関係のDB操作を行ってみましょう。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る