表查询到案例列表-class
TableQuery to List of case-class
我有一个播放应用程序,它使用 slick 3 查询下面的 Mysql 数据库:
我定义了一个用户案例 class 和用户如下:
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
所以我期待一种更简洁明了的方式将案例列表 class 转换为 TableQuery,反之亦然。有更好的方法吗?
上述解决方案效果很好,但我有十几个 table 需要填充。然后它开始看起来丑陋和重复。
将 User
class 个实例的列表写入 table 可以使用 ++=
方法完成,如下所示
def insert(data: List[User]) = {
db.run(users ++= data)
}
根据姓氏进行查询,如下所示。下面的方法 returns Future
of List
of User
。
def queryLastName(lastName: String): Future[List[User]] = {
db.run(users.filter(usr => usr.last === lastName).result)
}
我有一个播放应用程序,它使用 slick 3 查询下面的 Mysql 数据库: 我定义了一个用户案例 class 和用户如下:
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
所以我期待一种更简洁明了的方式将案例列表 class 转换为 TableQuery,反之亦然。有更好的方法吗?
上述解决方案效果很好,但我有十几个 table 需要填充。然后它开始看起来丑陋和重复。
将 User
class 个实例的列表写入 table 可以使用 ++=
方法完成,如下所示
def insert(data: List[User]) = {
db.run(users ++= data)
}
根据姓氏进行查询,如下所示。下面的方法 returns Future
of List
of User
。
def queryLastName(lastName: String): Future[List[User]] = {
db.run(users.filter(usr => usr.last === lastName).result)
}