【问题标题】:how to use IN Clause in spring jdbc如何在spring jdbc中使用IN子句
【发布时间】:2020-06-12 03:14:19
【问题描述】:

如何在 spring jdbc 模板中使用 IN 子句或如何在我查询 db 时过滤掉所有与字符串不匹配的值 我可以使用流 API 获取所有值是否可以跳过仅添加 FinancialTx.getActivationCode() 匹配项到 VPMA 和 OLAM

Map<String, Object> params = new HashMap<String, Object>();
        List<String> activationCode = new ArrayList<String>();
        activationCode.add("VPMA");
        activationCode.add("OLAM");
        Map activationCodes = Collections.singletonMap(activationCode, "activationCode");
        params.put("userEmail", userEmail);
        params.put("activationCode", activationCodes);
        LocalDateTime time = asOf.minusDays(psValidationDays);
        params.put("time", Timestamp.valueOf(time));
        String sql =
                "select "
                        + "fx.date_created,"
                        + "fx.balance,"
                        + "au.email,"
                        + "l.code "
                        + "from financial_tx fx "
                        + "inner join altpay_user au on "
                        + "au.id = fx.altpay_user_id "
                        + "inner join lookup l on "
                        + "l.id = fx.tx_type_id "
                        + "where au.email in (:userEmail) and "
                        + "l.code in (:activationCode) and "
                        + "(fx.date_created  >= :time) order by date_created desc";
        List<FinancialTx> financialTxList =
                namedParameterJdbcTemplate.query(sql, params, financialTxrowMapper);
        /*  final Iterator<FinancialTx> iterator = financialTxList.iterator();
           while (iterator.hasNext()) {
                    final FinancialTx financialTx = iterator.next();
                    if (financialTx.getActivationCode().equals("VPMA")) {
                        iterator.remove();
                    }
        */
        return financialTxList;
    }

【问题讨论】:

  • 很难说出你在问什么。你能以某种方式重写这个问题吗?我假设您想了解如何在JdbcTemplate 中使用IN 子句?

标签: java resttemplate spring-jdbc


【解决方案1】:

在您的params 映射中,您可以设置Collection 类型的值,以便使用IN 搜索它们。查看您想要为userEmailactivationCode 执行此操作的SQL。所以你可以像这样在参数中设置它们:

params.put("userEmail", Lists.newArrayList(userEmail));//create List using Google guava, feel free to use whatever
params.put("activationCode", activationCode);//i.e. no need to add to a Map

请记住,您还没有实例化 userEmail 没有在您的代码 sn-p 中实例化,所以我假设它是从其他地方访问的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 2016-11-13
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多