【发布时间】:2021-03-23 15:42:01
【问题描述】:
我有一个屏幕,用户可以在其中根据一个或多个列搜索表格。我将用户想要过滤的列作为 DTO 传递到后端。
我正在构建一个 SQL 来通过检查 DTO 中是否存在这些字段来进行查询...
Object transactionSearch (TransactionSearchDTO dto ){
StringBuilder transactionQuery = new StringBuilder()
transactionQuery.append("SELECT id, delivery_date, order_date, customer_name FROM transaction where 1=1 ")
if (dto.order_id) {
transactionQuery.append("and order_id = ${dto.order_id}")
}
if (delivery_date) {
transactionQuery.append("and order_id = ${delivery_date}")
}
if (customer_name) {
transactionQuery.append("and order_id = ${customer_name}")
}
}
我最终得到的是每列的大量 if 语句。
有没有办法在没有每个过滤器的 if 块的情况下实现这一点?
我发现了一些想法here,但我需要一个 Groovy 或 Java 解决方案。
【问题讨论】:
-
您的示例是否需要调整为在所有三个
if测试中不使用order_id?