DB.withConnection { implicit c =>
……実行する処理……
}val id: Int = SQL( 実行する文 ).SQLが、クエリーを実行するためのものです。この()内に、実行するSQLのクエリー文を用意します。その後のonでは、クエリー分のテキストに用意されている変数(?)に値を代入する働きをします。ここでの例を見ると、
on( 値の指定 ).executeUpdate()
"…… values ({name}, {mail}, {tel})").
on('name->this.name, 'mail -> this.mail, 'tel -> this.telこんな具合に書かれていますね? クエリーのテキストにある{name}, {mail}, {tel}という部分に、その後のon内に記述した値をそれぞれはめ込んでいくわけです。例えば'name->this.nameでは、{name}の部分にthis.nameの値を設定する、という意味になります。こうしてテキストに必要な値をはめ込んでクエリー文を完成させ、完成したそれをexecuteUpdateで実行する、という流れになります。val datas = SQL("Select * from mydatas").as(Mydata.data *)クエリーには"Select * from mydatas"と指定していますね。これでmydatasの全レコードを取得することができます。注意したいのは、その後にある「as」です。これは、取得したデータを、Mydata.dataの形で取り出すことを示すものです。val data = {
get[String]("name") ~
get[String]("mail") ~
get[String]("tel") map {
case name ~ mail ~ tel =>
Mydata(name, mail, tel)
}
}なんだかよくわからない感じがしますが、これを整理するとこんなかんじで書かれていることがわかるでしょう。{get○○~get○○~…… map{case ○○~○○…… => モデルクラス(……)}ここでの「~」という記号は、Anorm特有の機能で、値をリスト化する働きをします。例えば、A~B~Cとすると、((A, B), C)というようにまとめられます。こうしてまとめたものを元にMydataオブジェクトを生成するのが、その後のmap部分です。※リストが表示されない場合
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
}
}
}
| << 前へ | 次へ >> |