我想了解如何根据最终用户的搜索条件编写可用于检索行的动态 SQL 调用。我特别想知道如何构造从客户端发送到服务器的数据。我将把这个问题限制在单个表搜索中。
通常,当我从客户端发送搜索条件时,它是简单的预定数据。例如通过 ID 获取项目,或者获取时间戳大于给定时间的项目。这些参数可以很容易地附加到准备好的语句中。但是,现在我需要让用户选择他或她想要的搜索参数,以搜索单个表 搜索数据的方法有很多。以下是我能想到的几个例子:
- 数字、字符串、日期等等于。特定的ID,注册等。
- 从 x 到 y 范围内的数字、字符串日期等。 寻找某个年龄段的人,或预订一段时间。
- 列表中的数字、字符串、日期。寻找是北约国家之一公民的人。
换句话说,对于我发送的每个参数,我还需要发送参数属于哪个列的元数据,以及应该如何使用这些参数。到目前为止,我已经发送了一组固定的搜索参数作为键值对,服务器端将知道哪种数据类型以及它应该被解释为哪种验证类型。现在我需要发送也包含这种信息的对象,因为用户可以自己决定要发送多少列参数。
因此,对于每个查询,除了要返回哪个表和哪些列之外,我还需要了解每个查询条件的以下内容:
- 检查哪一列
- 要执行什么类型的检查(等于、喜欢、介于、大于、在列表中等)
- 上面还需要对应参数数据结构(equals有一个单值, between/range应该有两个,list有1-*)
- 参数/列的数据类型 (?)
- 可能还有排序标准。
现在我可以将它作为纯 JSON 发送,并创建我自己的解释器服务器端,它可以使用 ORM 生成 SQL、JPQL 或条件查询。最后一个是我可能的选择。然而,我确实有一种感觉,必须有一个标准的解决方案来将这样的动态 SQL 查询数据从客户端发送到服务器端。以约会网站为例,用户可以在其中根据无数可能的选项搜索可能的合作伙伴。有这么多的应用程序,如果没有标准的解决方案,我会感到惊讶。