繁体   English   中英

如何在不制作许多 if-else 语句的情况下将字段从 pojo 传递给 jdbctemplate 方法?

[英]How can i pass fields from a pojo to jdbctemplate methods without making many if-else statements?

我有一个带有 @RequestParam Map<String, String> 的 GET 方法的 RestController 然后我将 Map 传递给 pojo 以将其存储在带有 setter 的字段中。 现在我想将这些字段传递给存储库中的方法,我在不同的 class 中这样做:

            if (map.size() == 1) {
                return repo.methodWithOneParam(pojo.getFieldOne());
            }
            if (map.size() == 2) {
                return repo.methodWithTwoParam(pojo.getFieldOne(),pojo.getFieldTwo);
            }
            if (map.size() == 3) {
               return repo.methodWithThreeParam(pojo.getFieldOne(),pojo.getFieldTwo,pojo.getFieldThree);
            }

我能否以某种方式动态地摆脱这些 if-if-else 语句,因为我有 15 种或更多类似于 repo 中的方法。 Repo 存储连接到数据库的方法。

switch/case 构造是一个小清洁器:

int mapSize = map.size();
switch (mapSize) {
  case 1: return repo.methodWithOneParam(pojo.getFieldOne());
          break;
  case 2: return repo.methodWithTwoParam(pojo.getFieldOne(), pojo.getFieldTwo);
          break;
  case 3: return repo.methodWithThreeParampojo.getFieldOne(), pojo.getFieldTwo, pojo.getFieldThree);
          break;
  default: return "No handler for call with " + mapSize + " params.";
          break;
}

在您可能遇到麻烦的地方,使您的 controller 代码僵化和冗长是在您的存储库中定义所有这些特定于案例的方法。 也许您应该只公开一个 repo 方法“methodWithAnyNumberOfParams(Map<String, String> paramMap)”并在实现中使用任何自定义和/或动态代码(默认方法注释 @Query 等)然后您的 controller 方法包含在 return repo 中。方法WithAnyNumberOfParams(inputMap); ......还有一点。

我推断(“疯狂猜测”的一个花哨的词)您允许传递任意数量的过滤条件,以便动态生成 SQL WHERE 子句,从

SELECT * FROM CRIMINAL_CONVICTIONS WHERE LAST_NAME = 'Capone'

...至上述内容以及以下任何/所有内容:

AND CRIME_TYPE = 'Felony'
AND GUN_USED = 'Y'
AND STATE = 'IL'
AND DECADE = '1920s'

等顺便说一句,请确保您的框架在任何情况下都不允许 SQL 注入。 使用预定义的常量和/或枚举来匹配传入的键。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM