【发布时间】:2012-10-17 08:13:37
【问题描述】:
我是 Scala 的新手,一直在努力解决问题,不知道如何将查询结果返回给调用方法
我有一个简单的 UserDto
case class UserDto(val firstName:String,
val lastName:String,
val userName:String,
val isAdmin:Boolean) {}
一个用户表对象
object User extends Table[(String, String, String, Boolean)]("USER") {
def firstName = column[String]("FIRST_NAME")
def lastName = column[String]("LAST_NAME")
def userName = column[String]("USER_NAME")
def admin = column[Boolean]("IS_ADMIN")
def * = firstName ~ lastName ~ userName ~ admin
}
还有一个查询类
class UserQuerySlickImpl(dataSource:DataSource) {
def getResults(userName:String):Option[UserDto] = {
var resultDto:Option[UserDto] = None
Database.forDataSource(dataSource) withSession {
val q = for {u <- User if u.userName is userName}
yield (u.firstName, u.lastName, u.userName, u.admin)
for (t <- q) {
t match {
case (f:String, l:String, u:String, a:Boolean) =>
resultDto = Some(new UserDto(f, l, u, a))
}
}
}
resultDto
}
}
我可以查询数据库并获取与用户名匹配的用户,但我可以弄清楚如何返回该用户的唯一方法是在 Database.forDataSource....{} 之外创建一个 var。
有没有更好的方法,不使用var而是直接返回resultDto。
还有一种方法可以直接从第一个构造 UserDto 以进行理解,而不需要第二个 for (t
我使用的是 slick_2.10.0-M7,版本 0.11.1。
【问题讨论】: