1

我正在使用 kotlin 编写一个 dropwizard 应用程序,其中一种资源方法将接收多个参数(电子邮件、电话、is_deleted 等)。根据传入的查询参数,我必须过滤表。我正在使用 Exposed 的 DAO API 来构造查询。

val result = User.find { //SqlExpressionBuilder Users.isDeleted eq false Users.email eq "so@soso.com" }.sortedByDescending { it.createdAt }

如何使用 for in 循环根据查询参数映射向查询添加多个 where 条件?

4

1 回答 1

1

我不得不使用 DSL 来解决这个问题。似乎 DAO 没有这样的规定来创建这样的临时查询。

val query = Users.selectAll()
for((k, v) in params) {
    val value = URLDecoder.decode(v, "UTF-8")
    when(value) {
        "email" -> query.andWhere { Users.email eq value }
        "phone" -> query.andWhere { Users.phone eq value }
    }
}
return query.andWhere { Users.isDeleted.eq(false) }

正如@Tapac 所提到的,人们也可以使用User.wrapRows(query).sortedByDescending()来构建这样的查询,但同样必须使用 DSL。

希望对某人有所帮助。

于 2018-10-03T11:16:02.783 回答