如何将基于传入参数的多个过滤条件添加到公开DAO API“ .find”

时间:2018-09-27 06:51:49

标签: kotlin kotlin-exposed

我正在使用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条件?

1 个答案:

答案 0 :(得分:0)

我不得不使用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。

希望能帮助某人。