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

xu3bshqb  于 2022-12-23  发布在  Kotlin
关注(0)|答案(2)|浏览(97)

我正在使用Kotlin编写一个dropwizard应用程序,其中一个资源方法将接收多个参数(email,phone,is_deleted等)。基于传入的查询参数,我必须过滤表。我正在使用暴露的DAO API来构造查询。
第一个月
如何使用for in循环基于查询参数的Map向查询添加多个where条件?

ztigrdn8

ztigrdn81#

我不得不使用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。
希望这能帮上忙。

hrysbysz

hrysbysz2#

有可能:

val email = URLDecoder.decode("email", "UTF-8")
val phone = URLDecoder.decode("phone", "UTF-8")

Users.find {
  if (email != null) (Users.email eq email) else Op.TRUE
  .and(if (phone != null) (Users.phone eq phone) else Op.TRUE)
}

相关问题