案例示例可以简单参考 play2.4 and Slick 3.0 <helloplay>
Play 2.4 新增对客户端和服务端的错误分别处理机制.如本例在models下增加了一个错误请求处理方法ErrorHandler
然后在配置文件中将此应用到整个工程中
play.http.errorHandler = "models.ErrorHandler"
数据库方面则采用的是Play的Evolutions插件
slick3.x 的数据查询方式相对2.x还用有一点差异,TableQuery的结果为DBIOActions对象,然后执行db.run()生成Future对象进行后续操作
slick 3.0 CURD查询示例
import slick.driver.MYSQLDriver.api._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
abstract class GenericDao[E, T <: Table[E], K] {
val table: TableQuery[T]
def filterQuery(id: K): Query[T, E, Seq]
val db = Database.forConfig("h2mem1")
def fetchAll() =
db.run(table.result)
def fetchById(id: K): Future[Seq[E]] =
db.run(filterQuery(id).result)
def fetchOneById(id: K): Future[Option[E]] =
db.run(filterQuery(id).result).map(_.headOption)
def insert(item: E): Future[Int] =
db.run(table += item)
def update(id: K, item: E): Future[Int] =
db.run(filterQuery(id).update(item))
def remove(id: K): Future[Int] =
db.run(filterQuery(id).delete)
对获取的Futuer对象在APP中可以通过map方法获的取值(如本例的findAll方法)
def findAll=Action.async{
val data=TESTCon.findAll()
data.map(p=>Ok(Json.toJson(p)))
}
浏览器输入:http://localhost:9000/user/all
查询结果:
[{"name":"yang","id":1},{"name":"yang","id":2},{"name":"yang","id":3},{"name":"yang","id":5},{"name":"yang","id":6}]
7.27 重构大部分代码,将Akka应用到工程中