我有一个播放应用程序,使用slick 3查询下面的Mysql DB: 我已经定义了一个User case类和Users,如下所示:
case class User(id: Option[Int], first: String, last: String)
class Users(tag: Tag) extends Table[User](tag, "users") {
def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
def first = column[String]("first")
def last = column[String]("last")
def * = (id.?, first, last) <> (User.tupled, User.unapply)
}
val users = TableQuery[Users]
现在,当我使用姓氏“Smith”查询用户时。这就是它的样子
val usersTab = users.filter(usr => usr.last === 'Smith').result
val userList:List[User] = users.map(usr => User(usr.id,usr.first,usr.last)).toList
同样,如果我将List [User]作为userList需要添加到数据库中。然后,
users.map(usr => (usr.id,usr.first,usr.last))+=((userList(0).id,userList(0).first, userList(0).last)) //Iterate over all element
所以我期待一种更简洁,更简洁的方法将List of case class转换为TableQuery,反之亦然。有更好的方法吗?
上面的解决方案运行良好,但我有十几个需要填充的表。然后它开始变得丑陋和重复。
答案 0 :(得分:1)
将User
类实例列表写入表可以使用++=
方法完成,如下所示
def insert(data: List[User]) = {
db.run(users ++= data)
}
根据姓氏查询,如下所示。以下方法返回Future
List
User
个def queryLastName(lastName: String): Future[List[User]] = {
db.run(users.filter(usr => usr.last === lastName).result)
}
。
.class public HelloWorld
.super java/lang/Object
.method public static main([Ljava/lang/String;)V
.limit stack 3
.limit locals 1
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "Hello World."
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
return
.end method