,可以通过以下步骤完成:
case class User(id: Long, name: String, email: String)
import javax.inject.Inject
import play.api.db.slick.DatabaseConfigProvider
import slick.jdbc.JdbcProfile
class UserDao @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) {
val dbConfig = dbConfigProvider.get[JdbcProfile]
import dbConfig._
import profile.api._
private val users = TableQuery[UserTable]
def findById(id: Long): Future[Option[User]] = db.run(users.filter(_.id === id).result.headOption)
def insert(user: User): Future[Unit] = db.run(users += user).map(_ => ())
def update(user: User): Future[Unit] = db.run(users.filter(_.id === user.id).update(user)).map(_ => ())
def delete(id: Long): Future[Unit] = db.run(users.filter(_.id === id).delete).map(_ => ())
private class UserTable(tag: Tag) extends Table[User](tag, "users") {
def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
def name = column[String]("name")
def email = column[String]("email")
def * = (id, name, email) <> (User.tupled, User.unapply)
}
}
import javax.inject._
import play.api.mvc._
import scala.concurrent.ExecutionContext
@Singleton
class UserController @Inject()(cc: ControllerComponents, userDao: UserDao)(implicit ec: ExecutionContext) extends AbstractController(cc) {
def getUser(id: Long) = Action.async { implicit request =>
userDao.findById(id).map {
case Some(user) => Ok(s"User: ${user.name}, Email: ${user.email}")
case None => NotFound("User not found")
}
}
def createUser = Action.async(parse.json) { implicit request =>
request.body.validate[User].fold(
errors => Future.successful(BadRequest("Invalid user data")),
user => userDao.insert(user).map(_ => Created("User created"))
)
}
def updateUser(id: Long) = Action.async(parse.json) { implicit request =>
request.body.validate[User].fold(
errors => Future.successful(BadRequest("Invalid user data")),
user => userDao.update(user.copy(id = id)).map(_ => Ok("User updated"))
)
}
def deleteUser(id: Long) = Action.async { implicit request =>
userDao.delete(id).map(_ => Ok("User deleted"))
}
}
GET /user/:id controllers.UserController.getUser(id: Long)
POST /user controllers.UserController.createUser
PUT /user/:id controllers.UserController.updateUser(id: Long)
DELETE /user/:id controllers.UserController.deleteUser(id: Long)
通过以上步骤,就可以在Play Framework for Scala中使用模型来处理数据。这种方式可以使代码结构清晰,易于维护,并且可以充分利用Play Framework提供的功能和特性。
推荐的腾讯云相关产品:腾讯云数据库(TencentDB)、腾讯云服务器(CVM)、腾讯云函数(SCF)、腾讯云对象存储(COS)等。你可以通过访问腾讯云官网了解更多相关产品和详细信息。
参考链接:
领取专属 10元无门槛券
手把手带您无忧上云