Model(モデル)を使ってデータベースアクセスする[Scala編] (4/7)
作成:2013-02-10 10:09
更新:2013-02-10 10:09
更新:2013-02-10 10:09
■モデルを作成する
では、いよいよモデルの作成を行いましょう。モデルは、「app」内に「models」というフォルダを用意し、この中にスクリプトファイルを配置します。今回は、「mydata.scala」という名前でファイルを作成しておきます。
下のリスト欄に、ソースコードを掲載しておきました。今回は、データを保存するための「addData」メソッドと、データの一覧を取得する「getAll」という2つのメソッドを用意しておきました。
ファイルは「models」フォルダに配置していますから、package modelsとしてmodelsパッケージにあることを指定します。また、その下に以下の4つのimport文があります。
ここでは、Mydataというcase classが用意されています。これは、よく見るとこんな形になっています。
case classでは、コンパニオンメソッド(toStringなどの必須メソッドのこと)を自動生成してくれるなどの処理が追加されました。これはインスタンスを作成し、利用できました。つまり、このcase classにあるのは、作成したインスタンスから利用できるメソッド(インスタンスメソッド)であることはわかるでしょう。
これに対し、objectは、たった1つだけのオブジェクト(インスタンス)を作成するためのものでした。シングルトン作成のためのもの、と先に説明をしましたね。しかし、オブジェクトで「これ1つしか存在できないインスタンス」というって、一体どういうものでしょうか。シングルトンがそうだとはいいましたが、もっと一般的なものでそういうものあったでしょう?
それは、「クラス」です。クラスはオブジェクトであり、しかも1つだけしか存在しません。つまり、このobjectを使ってcase calssと同じ名前のクラスを定義すると、このobject内のメソッドはいわゆる「クラスメソッド」として実装されるのです。
下のリスト欄に、ソースコードを掲載しておきました。今回は、データを保存するための「addData」メソッドと、データの一覧を取得する「getAll」という2つのメソッドを用意しておきました。
ファイルは「models」フォルダに配置していますから、package modelsとしてmodelsパッケージにあることを指定します。また、その下に以下の4つのimport文があります。
import play.api.db._play.api.dbパッケージは、データベース関連のクラスを提供するものです。またanormは、文字通りanorm関連のクラスがまとめてあります。この他、コード内で必要となるものとしてplay.api.Play.currentとanorm.SqlParserをimportしてあります。これらは、まぁ必須のimportと考えていいでしょう。
import anorm._
import play.api.Play.current
import anorm.SqlParser._
ここでは、Mydataというcase classが用意されています。これは、よく見るとこんな形になっています。
case class クラス名(……引数……){case classでは、「addData」メソッドが定義されていますね。そしてobjectには、dataという変数と、「getAll」メソッドが定義されています。これらは何が違うのでしょう? なぜ、どっちか1つにまとめないのでしょうね?
……メソッドの定義……
}
object クラス名 {
……メソッドの定義……
}
case classでは、コンパニオンメソッド(toStringなどの必須メソッドのこと)を自動生成してくれるなどの処理が追加されました。これはインスタンスを作成し、利用できました。つまり、このcase classにあるのは、作成したインスタンスから利用できるメソッド(インスタンスメソッド)であることはわかるでしょう。
これに対し、objectは、たった1つだけのオブジェクト(インスタンス)を作成するためのものでした。シングルトン作成のためのもの、と先に説明をしましたね。しかし、オブジェクトで「これ1つしか存在できないインスタンス」というって、一体どういうものでしょうか。シングルトンがそうだとはいいましたが、もっと一般的なものでそういうものあったでしょう?
それは、「クラス」です。クラスはオブジェクトであり、しかも1つだけしか存在しません。つまり、このobjectを使ってcase calssと同じ名前のクラスを定義すると、このobject内のメソッドはいわゆる「クラスメソッド」として実装されるのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※models/mydata.scalaのソースコード package models import play.api.db._ import anorm._ import play.api.Play.current import anorm.SqlParser._ case class Mydata( name: String, mail: String, tel: String) { def addData { DB.withConnection { implicit c => val id: Int = SQL("insert into mydatas (name, mail, tel) values ({name}, {mail}, {tel})"). on('name->this.name, 'mail -> this.mail, 'tel -> this.tel).executeUpdate() } } } object Mydata { val data = { get[String]("name") ~ get[String]("mail") ~ get[String]("tel") map { case name ~ mail ~ tel => Mydata(name, mail, tel) } } def getAll: List[Mydata] = { DB.withConnection { implicit c => val datas = SQL("Select * from mydatas").as(Mydata.data *) return datas } } }
※関連コンテンツ