- dao packageを使う
- diを使う
- dbはmysql
の場合、設定備忘録
build.scala
name := "activator-play-slick"
version := "1.0-SNAPSHOT"
scalaVersion := "2.11.7" // or "2.10.4"
libraryDependencies ++= Seq(
"org.webjars" %% "webjars-play" % "2.3.0-2",
"com.typesafe.play" %% "play-slick" % "1.1.0",
"com.typesafe.play" %% "play-slick-evolutions" % "1.1.0",
"mysql" % "mysql-connector-java" % "5.1.36"
)
fork in Test := false
lazy val root = (project in file(".")).enablePlugins(PlayScala)
routesGenerator := InjectedRoutesGenerator
plugin.sbt
// The Typesafe repository
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
// Use the Play sbt plugin for Play projects
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.3")
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")
CatDao
package dao
import models.Models.Cat
import scala.concurrent.Future
import javax.inject.Inject
import play.api.db.slick.DatabaseConfigProvider
import play.api.db.slick.HasDatabaseConfigProvider
import slick.driver.JdbcProfile
import scala.concurrent.ExecutionContext.Implicits.global
class CatDao @Inject()(protected val dbConfigProvider: DatabaseConfigProvider)
extends HasDatabaseConfigProvider[JdbcProfile] {
import driver.api._
private val cats = TableQuery[CatsTable]
// ddl
{
val schema = cats.schema
db.run(schema.create)
}
def all(): Future[Seq[Cat]] = db.run(cats.result)
def insert(cat: Cat): Future[Unit] = db.run(cats += cat).map { _ => () }
private class CatsTable(tag: Tag) extends Table[Cat](tag, "CAT") {
def name = column[String]("name", O.PrimaryKey)
def color = column[String]("color")
def * = (name, color) <> (Cat.tupled, Cat.unapply _)
}
}
Application.scala
package controllers
import javax.inject.Inject
import play.api.libs.concurrent.Execution.Implicits.defaultContext
import dao.CatDao
import models.Models.Cat
import play.api.data._
import play.api.data.Forms._
import play.api.mvc._
class Application @Inject() (cats: CatDao) extends Controller {
val catForm = Form(
mapping(
"name" -> text(),
"color" -> text()
)(Cat.apply)(Cat.unapply)
)
def index = Action.async {
cats.all.map { case cs => Ok(views.html.index(cs)) }
}
def insert = Action.async { implicit rs =>
val cat: Cat = catForm.bindFromRequest.get
cats.insert(cat).map(_ => Redirect(routes.Application.index))
}
}