Exposed DAO如何根据传入参数添加多个过滤条件API ".find"
How to add multiple filter conditions based on incoming parameters to the Exposed DAO API ".find"
我正在使用 kotlin 编写一个 dropwizard 应用程序,其中一种资源方法将接收多个参数(电子邮件、phone、is_deleted 等)。根据传入的查询参数,我必须过滤 table。我正在使用 Exposed 的 DAO API 来构造查询。
val result = User.find { //SqlExpressionBuilder
Users.isDeleted eq false
Users.email eq "so@soso.com"
}.sortedByDescending { it.createdAt }
如何使用 for in 循环向基于查询参数映射的查询添加多个 where 条件?
我不得不使用 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。
希望对某人有所帮助。
我正在使用 kotlin 编写一个 dropwizard 应用程序,其中一种资源方法将接收多个参数(电子邮件、phone、is_deleted 等)。根据传入的查询参数,我必须过滤 table。我正在使用 Exposed 的 DAO API 来构造查询。
val result = User.find { //SqlExpressionBuilder
Users.isDeleted eq false
Users.email eq "so@soso.com"
}.sortedByDescending { it.createdAt }
如何使用 for in 循环向基于查询参数映射的查询添加多个 where 条件?
我不得不使用 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。
希望对某人有所帮助。