如何使用slick使用select语句?

问题描述 投票:0回答:2

我想使用滑动条从下面的示例表中查询数据

   id  | username |              password              
   ----+----------+------------------------------------
    1  | admin    | admin@123
    2  | user     | user@123

查询是

    SELECT password FROM users WHERE username = 'user';

我已经阅读了很多有关堆栈溢出的示例,但它们是更复杂的查询

我想要使用slick这样的简单查询。

postgresql scala playframework slick
2个回答
0
投票

首先定义一个代表您的SQL表的类

class UsersTable(tag: Tag) extends Table[User](tag, "users") {

  def email: Rep[String] = column[String]("email", O.PrimaryKey)
  def password: Rep[String] = column[String]("password")
  def registered: Rep[Boolean] = column[Boolean]("registered")
  def firstName: Rep[Option[String]] = column[Option[String]]("first_name")
  def lastName: Rep[Option[String]] = column[Option[String]]("last_name")
  def username: Rep[Option[String]] = column[Option[String]]("username", O.Unique)
  def contact: Rep[Option[String]] = column[Option[String]]("contact")

  override def * = (email, password, registered, firstName, lastName, username, contact) <> (User.tupled, User.unapply)
}

然后为您的表创建一个DAO,该DAO具有选择'one'行的方法。像这样:

class UsersDao @Inject()(protected val dbConfigProvider: DatabaseConfigProvider)
                        (implicit executionContext: ExecutionContext) extends HasDatabaseConfigProvider[JdbcProfile]  {
  import profile.api._
  private val Users = TableQuery[UsersTable]

  def selectOne(email: String): Future[Option[User]] = db.run(Users.filter(_.email === email).result.headOption)

}

现在在您的服务班级中读取记录是这样的>>

class AuthService @Inject()(usersDao: UsersDao) {
  def someFunction(.. some_params ..) {
    usersDao.selectOne(someParama.email).flatMap {
      case Some(user: User) => //Do something if user exists
      case None => //Do something else if user doesn't exist
    }
  }
}

如果您有兴趣探索用Scala编写的游戏项目,请查看此项目https://github.com/ashishtomer/fastscraping-web


0
投票

您只能在这种情况下使用plain SQL query

© www.soinside.com 2019 - 2024. All rights reserved.