表查询到案例列表-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)
}