gpt4 book ai didi

java - 如何基于多个不同的 URI 构建查询

转载 作者:行者123 更新时间:2023-11-30 21:45:51 25 4
gpt4 key购买 nike

我目前所做的:因为我正在使用 aws λ 和 aws API 网关,我已经学会了捕获 URI 的特定部分,例如路径和查询参数,并且我正在根据给定的路径和参数构建对我的数据库的不同查询。

例子:

https://ApiURI/user?id=id_1

路径=用户

参数=id:id_1

我将两条数据都放在了 Map<String, Map<String, String> 中对象,其中第一个字符串是键(路径或参数),内部映射包含实际值。我这样做是因为我觉得它会更好地扩展,因为我事先不知道 URI 将有多少路径或参数(这个想法是能够过滤给定的 URI/概念/实体有 0 到 N 个过滤器,同时应用 0 个甚至全部,一些 URI 目前可以有 8 个过滤器),路径也可以有几个“斜杠”,例如 /user/profileskill/profile?date=today但截至目前情况并非如此。

示例:/course可以有以下过滤器(也称为 queryParameters,因为这是我看到 AWS 有时给它的名称):

  1. 技能
  2. 费用
  3. 在线
  4. 持续时间
  5. 等级
  6. 认证
  7. 语言

我缺乏经验,无法了解如何在考虑缩放的情况下做到这一点。目前我正在做的事情类似于以下示例(为简洁起见简化了查询)。在这个例子中,我捕捉到某个键是否出现在 map 中,如果出现,我构建适当的查询。 现在一次应用多个过滤器的最大问题是它们可能需要与不同的表进行连接(假设对于之前的列表,当 ?skill 出现时,我构建了一个带有内部连接的查询表 skill ,当 ?cost 或级别出现时,我必须与另一个名为 course 的表进行连接,例如):

if(pathParameters.containsValue("profiles")) {
if(queryParameters == null || queryParameters.isEmpty()) {
try {
preparedstatement = con.prepareStatement("SELECT * from profiles");
} catch (SQLException e) {
e.printStackTrace();
}
}
else if(queryParameters.containsKey("zone")) {
try {
preparedstatement = con.prepareStatement("SELECT * from profiles where id = ? GROUP BY id;");
preparedstatement.setString(1, queryParameters.get("zone"));
} catch (SQLException e) {
e.printStackTrace();
}
}
else if(queryParameters.containsKey("skill")) {
try {
preparedstatement = con.prepareStatement("SELECT * from skills where id = ?");
preparedstatement.setString(1, queryParameters.get("skill"));
} catch (SQLException e) {
e.printStackTrace();
}
}
else if(queryParameters.containsKey("experiencia")) {
try {
[....]
}
}
}

总而言之,我有许多逻辑分支​​,我不太清楚如何简化,因为每个分支都可以关联不同的查询,需要连接到某个表。为了避免 7! IF 案例的可能性的数量,我需要更动态地构建查询(这是我迄今为止提出的唯一想法)。为此,我需要加入两个具有不同逻辑的不同查询,我不知道这是否可能。

最佳答案

我还没有实现这个选项,但到目前为止这看起来很接近我正在寻找的东西,所以我将它作为答案发布,以防将来其他人可能会使用它们,但到目前为止它只是一个部分答案:

DbExtensions尽管不幸的是,它适用于 .Net 而不是 java。

http://www.mybatis.org/mybatis-3/statement-builders.html

特别是这样的代码是我的目标:

void DynamicSql(int? categoryId, int? supplierId) { 

var query = SQL
.SELECT("ID, Name")
.FROM("Products")
.WHERE()
._If(categoryId.HasValue, "CategoryID = {0}", categoryId)
._If(supplierId.HasValue, "SupplierID = {0}", supplierId)
.ORDER_BY("Name DESC");

Console.WriteLine(query);
}

关于java - 如何基于多个不同的 URI 构建查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49535142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com