play-slick基础:CRUD操作
来源:互联网 发布:淘宝精品山珊瑚绒毛毯 编辑:程序博客网 时间:2024/06/09 16:45
Play框架提供了对Slick的集成模块play-slick。本文将介绍从后台数据库到前台请求的的全过程。
一、数据库建模
case class User(name:String, password:String,id:Option[Long] = None)object User { implicit val userWrites: Writes[User] = ( (JsPath \ "name").write[String] and (JsPath \ "password").write[String] and (JsPath \ "id").writeNullable[Long] )(unlift(User.unapply)) implicit val userReads: Reads[User] = ( (JsPath \ "name").read[String] and (JsPath \ "password").read[String] and (JsPath \ "id").readNullable[Long] )(User.apply _)}
注意:id是一个可选的属性,必须放在最后面,否则会导致play在Json转换的时候报错。
建表:mysql. 注意 ID要定义为自动增长的列。
CREATE TABLE USER( ID INT NOT NULL AUTO_INCREMENT, NAME VARCHAR(40) NOT NULL, PASSWORD VARCHAR(40) NOT NULL, PRIMARY KEY(ID));
二、Slick schema
import model._import slick.driver.JdbcProfiletrait UserSchema { protected val driver: JdbcProfile import driver.api._ class UserTable(tag: Tag) extends Table[User](tag, "USER") { def id = column[Long]("ID", O.PrimaryKey, O.AutoInc) def name = column[String]("NAME") def password = column[String]("PASSWORD") def * = (name, password, id.?) <> (User.tupled, User.unapply _) }}
三、Play Action定义
列出所有的用户
def usersList = Action.async { implicit request => { dbConfig.db.run(Users.result).map(res => Ok(Json.toJson(res.toList)) ) } }
创建一个用户
def addUser = Action.async(BodyParsers.parse.json) { implicit request => { val user = request.body.validate[User].get val insertQuery = ( Users returning Users.map(_.id)) += user dbConfig.db.run(insertQuery).map { result => Ok(Json.toJson(user.copy(id = Some(result)))) } } }
删除一个用户
def deleteUser(id: Long) = Action { val query = Users.filter(_.id === id).delete dbConfig.db.run(query) Ok("ok") }
更新一个用户
def updateUser(id: Long) = Action.async(BodyParsers.parse.json) { implicit request => { val newUser = request.body.validate[User].get val query = Users.filter(_.id === newUser.id).update(newUser) dbConfig.db.run(query).map { result => Ok(Json.toJson(newUser.id)) } } }
application.conf配置
slick.dbs.default.driver= "slick.driver.MySQLDriver$"slick.dbs.default.db.driver="com.mysql.jdbc.Driver"slick.dbs.default.db.properties.driver="com.mysql.jdbc.Driver"slick.dbs.default.db.user="root"slick.dbs.default.db.password="root"slick.dbs.default.db.url="jdbc:mysql://localhost:3306/xyz?useUnicode=true&characterEncoding=UTF-8"
然后再定义Controller时,直接注入配置好得DB连接就可以了。
class UserApplication @Inject()(dbConfigProvider: DatabaseConfigProvider) extends Controller with UserSchema with HasDatabaseConfig[JdbcProfile] { val dbConfig = dbConfigProvider.get[JdbcProfile] import driver.api._ val Users = TableQuery[UserTable]}
0 0
- play-slick基础:CRUD操作
- play-slick基础:CRUD操作
- scala+play+slick + mysql
- Mysql基础以及CRUD操作
- slick
- 【laravel】CRUD数据库操作基础记录
- play framework学习(CRUD)
- crud操作
- slick使用普通的sql操作数据
- 【Activiti 基础篇三】流程定义—CRUD操作
- MapReduce基础开发之八HDFS文件CRUD操作
- Apache Zookeeper 快速入门及API基础CRUD操作
- (七)play之yabe项目【CRUD】
- 用scala,slick做数据交互层,play做mvc开发restful接口
- Play slick 3.0 mysql 插入新增数据,并返回自增ID
- scala编程语言使用slick进行数据库操作
- Hibernate基础(CRUD)
- SQL基础CRUD语句
- lightoj1085 All Possible Increasing Subsequences
- Android 数据存储(二) 共享参数存储
- poj3368线段树
- Leetcode_260_Single Number III
- 关于Java Script中一些基本概念
- play-slick基础:CRUD操作
- 选择结构的程序设计
- UVALive 6852Blanket(暴力)
- ios界面尺寸
- AsyncTask的基本操作
- 软件测试对象
- 些微碎语
- 亲测,手把手教你用Python抢票
- Android动画之translate(位移动画)