【问题标题】:How to obtain Entity from Query with Kotlin Exposed DSL?如何使用 Kotlin Exposed DSL 从查询中获取实体?
【发布时间】:2022-09-27 22:01:01
【问题描述】:

我想在 Ktor 中使用 Exposed。最简单的问题是如何从查询选项中获取实体?

比如这些代码:

/**
 * get when exist
 */
fun checkExist(phone: String): DbUser? {
    return transaction(db) {
        addLogger(StdOutSqlLogger)
        DbUser
            .select { DbUser.phoneNumber eq phone }
            .firstOrNull()
            .???  // how to converter ResultRow to Entity ?
    }
}

我想检查用户在登录时是否存在并在存在时获取信息。但我只能获得 ResultRow 类型的 reuslt,如何将其转换为 DbUser 对象?

我在Kotlin exposed DSL Query mapping 中找到了方法,但它非常笨拙且浪费时间。我怎样才能轻松完成它?

  • 基本上,您需要编写一个从表行到您的实体的映射器。您应该创建一个扩展Table 类的类和一个单独的data class,用作DAO。目前没有选项可以让exposed 自动执行此映射。

标签: kotlin ktor kotlin-exposed


【解决方案1】:

请查看wiki article。 在您的情况下,可以通过两种方式解决:

DbUser.select { DbUser.phoneNumber eq phone }.firstOrNull()?.let { Entity.wrapRow(it) }

如果 Entity 映射到 DbUser 表:

Entity.find { DbUser.phoneNumber eq phone }.limit(1).firstOrNull()

【讨论】:

    猜你喜欢
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    相关资源
    最近更新 更多