我正在使用Kotlin编写一个dropwizard应用程序,其中一个资源方法将接收多个参数(email,phone,is_deleted等)。基于传入的查询参数,我必须过滤表。我正在使用暴露的DAO API来构造查询。第一个月如何使用for in循环基于查询参数的Map向查询添加多个where条件?
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。希望这能帮上忙。
User.wrapRows(query).sortedByDescending()
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) }
2条答案
按热度按时间ztigrdn81#
我不得不使用DSL来解决这个问题。似乎DAO没有这样的规定来创建这样的即席查询。
正如@Tapac所提到的,也可以使用
User.wrapRows(query).sortedByDescending()
来构造这样的查询,但同样必须使用DSL。希望这能帮上忙。
hrysbysz2#
有可能: