私は 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
}
}
データベースにクエリを実行して、ユーザー名に一致するユーザーを取得できますが、そのユーザーを返す方法を理解できる唯一の方法は、 の外側に var を作成することDatabase.forDataSource....{}
です。
var を使用せずにresultDto
直接返すより良い方法はありますか。
UserDto
また、(t <- q)のために2番目を必要とするのではなく、理解のために最初から直接構築する方法もあります...
slick_2.10.0-M7、バージョン 0.11.1 を使用しています。