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 クラス名(……引数……){
……メソッドの定義……
}
object クラス名 {
……メソッドの定義……
}case classでは、「addData」メソッドが定義されていますね。そしてobjectには、dataという変数と、「getAll」メソッドが定義されています。これらは何が違うのでしょう? なぜ、どっちか1つにまとめないのでしょうね?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
}
}
}
※関連コンテンツ