有没有办法只选择一条暴露了 kotlin 的记录? 目前我正在使用下面的代码从数据库中选择用户,但是是否有像 selectSingle() 这样的函数来获取对象(不是列表)?
fun getUser(userId: Int): User? {
var user: User? = null
transaction {
user = UserTable.select { UserTable.id eq userId }.limit(1).map { User.fromRow(it) }[0]
}
return user
}
我找到了一个很好的解决方案。学分归hfazai
fun getUser(userId: Int): User? {
var user: User? = null
val user = transaction {
user = UserTable.select { UserTable.id eq userId }.limit(1).single().let { User.fromRow(it) }
}
return user
}
PS:如果没有结果,single() 将抛出 NoSuchElementException;如果有多个结果行,则抛出 IllegalArgumentException。
您也可以省略用户变量
fun getUser(userId: Int): User =
transaction {
UserTable.select { UserTable.id eq userId }.limit(1).single().let { User.fromRow(it) }
}
您现在可以使用
singleOrNull
来避免没有结果时出现 NoSuchElementException。
fun getUser(userId: Int): User =
transaction {
UserTable.select {
UserTable.id eq userId
}.limit(1).singleOrNull()?.let { User.fromRow(it) }
}