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) }
        }