【发布时间】:2019-01-25 15:57:45
【问题描述】:
我正在使用 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 条件?
【问题讨论】:
-
您的意思是“查询参数映射”在您的示例中是
isDeleted和email的状态吗?您希望在循环中拥有多少这样的地图?组合一个很复杂的查询条件不是很有效,因为你的数据库不能使用索引,有时最好用10个简单快速的查询代替。 -
是的。这些是可通过查询参数搜索的表字段。给定的 sn-p 只是一个示例。搜索查询参数是表中的索引列。最多 6 个参数是我所期望的。但它可以是任何组合,例如 email、is_deleted、email 和 is_deleted、email 和 is_deleted 和 phone、email 和 phone 等。它可以是任何组合。所以我需要根据参数的存在来框定 where 条件。
-
您可以尝试查看"conditional where" wiki 部分。并编写自己的
orWhere函数类似于andWhere -
@Tapac,谢谢,我知道使用 DSL 我可以让它工作。我只是想知道,使用DAO我们可以做到吗。
-
那么唯一的选择是使用:
User.wrapRows(query).sortedByDescending()并在循环内设置query。
标签: kotlin kotlin-exposed