Kotlin Exposed SELECT 条记录
Kotlin Exposed SELECT single record
有什么方法可以 select 只有一条记录暴露了 kotlin?
目前我正在使用下面的代码 select 来自数据库的用户,但是是否有像 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
}
除了你已经在做的,别无他法。您可以使用 first()
或 firstOrNull
而不是 [0]
.
与 Kotlin 一样,您可以创建自己的扩展来简化调用:
fun Query.selectSingle() = limit(1).firstOrNull()
在通过主键获取对象的特殊情况下,您可以使用 DAO 的 findById
(docs)。
使用 DAO 为您提供了 wrapRow
/wrapRows
(usage example) 实现的额外好处,我猜这与代码中的 User.fromRow(it)
类似。
我找到了一个很好的解决方案。学分转到 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) }
}
有什么方法可以 select 只有一条记录暴露了 kotlin? 目前我正在使用下面的代码 select 来自数据库的用户,但是是否有像 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
}
除了你已经在做的,别无他法。您可以使用 first()
或 firstOrNull
而不是 [0]
.
与 Kotlin 一样,您可以创建自己的扩展来简化调用:
fun Query.selectSingle() = limit(1).firstOrNull()
在通过主键获取对象的特殊情况下,您可以使用 DAO 的 findById
(docs)。
使用 DAO 为您提供了 wrapRow
/wrapRows
(usage example) 实现的额外好处,我猜这与代码中的 User.fromRow(it)
类似。
我找到了一个很好的解决方案。学分转到 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) }
}