Play 2.4 and Slick 3.0 Simple Example

案例示例可以简单参考 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应用到工程中

你可能感兴趣的:(akka,slick3.0,Play2.4)