You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ktor中使用Exposed查询数据库表的最后一条记录?

使用Exposed框架查询数据库表最后一条记录

要获取articles_info表的最后一条记录,核心思路是按主键(通常是自增的id字段)降序排序,然后仅取第一条数据。以下是完整的实现代码及说明:

1. 调整表对象字段可见性(可选)

原代码中表字段为private,映射DTO时需要访问这些字段,建议改为public:

object ArticlesInfo : Table("articles_info") {
    val id = integer("id").autoIncrement() // 假设id是自增主键,可根据实际情况调整
    val likes = integer("likes")
    val views = integer("views")
}

2. 实现查询最后一条记录的函数

修改fetchArticleInfoLastRecord函数,通过排序+限制条数来获取目标记录,并完成DTO映射:

fun fetchArticleInfoLastRecord(): ArticleInfoDTO? {
    return transaction {
        ArticlesInfo
            .selectAll()
            .orderBy(ArticlesInfo.id to SortOrder.DESC) // 按id降序,最新的记录排在最前
            .limit(1) // 只取第一条
            .singleOrNull() // 避免表为空时抛出异常,返回null
            ?.let { result ->
                ArticleInfoDTO(
                    id = result[ArticlesInfo.id],
                    likes = result[ArticlesInfo.likes],
                    views = result[ArticlesInfo.views]
                )
            }
    }
}

关键说明

  • 如果你的表不是用id作为排序依据(比如有create_time时间字段),只需把orderBy的字段换成对应字段即可,例如:
    .orderBy(ArticlesInfo.createTime to SortOrder.DESC)
    
  • 原函数返回非空的ArticleInfoDTO,但实际场景下表可能为空,所以改为返回ArticleInfoDTO?更合理。如果业务要求必须返回非空值,可以在singleOrNull()后添加默认值或者抛出业务异常,例如:
    .singleOrNull() ?: throw IllegalStateException("表中无数据")
    

内容的提问来源于stack exchange,提问作者hestonic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:09:26