【问题标题】:Better way to use JdbcTemplate with Lambda RowMapper将 JdbcTemplate 与 Lambda RowMapper 结合使用的更好方法
【发布时间】:2022-12-15 07:30:42
【问题描述】:

我经常及时使用 jdbcTemplate.query 不返回结果集,而是访问数据库并对每个选定的记录进行一些计算。 例如下面的代码有效

    Map<String, Double> mAcc = new HashMap<>();
    sql = "select ar.id_codice_art, sum(ar.quantita) quantita\n" +
            "from accettazione a \n" +
            "inner join accettazione_riga ar on a.id_accettazione = ar.id_accettazione\n" +
            "where a.id_ordine = ? \n" +
            "group by ar.id_codice_art";
    jdbcTemplate.query(sql, (rs, i)->{
        mAcc.put(rs.getString("id_codice_art"), rs.getDouble("quantita"));
        return "";
    }, idOrdine);

但它并不干净,尤其是当返回“”时,因为 RowMapper 接口需要它。同时我不想创建一个记录或一个类只是为了返回一个列表并在列表上工作。

有没有更好的方法来使用 jdbcTemplate 做同样的事情?

【问题讨论】:

  • 这回答了你的问题了吗? How to get Map data using JDBCTemplate.queryForMap
  • “如何使用 JDBCTemplate.queryForMap 获取地图数据”没有回答我的问题。我的问题不是从结果集中填充地图,而是对可用于任何计算的每条记录进行回调。在我看来,下面皮特的回答是一个更清洁的解决方案。

标签: java spring jdbctemplate


【解决方案1】:

我假设 idOrdine 键是 Long。

Map<String, Double> mAcc = new HashMap<>();
PreparedStatementSetter pss = ps -> ps.setLong(1, idOrdine);
RowCallbackHandler rch = rs -> mAcc.put(rs.getString("id_codice_art"),
     rs.getDouble("quantita"));
jdbcTemplate.query(sql, pss, rch);

当然,您可以内联这些 lambda 以避免导入这两个类。

我刚刚在研究您的答案时了解到这一点,现在我将重写我刚刚为工作编写的一大块代码,以使用该方法!

【讨论】:

    【解决方案2】:
    You can try using the following code. Just create a new map, insert values in it and return it. and then you can copy values from that result map to your map.
    

     Map<String, Double> mAcc = new HashMap<>();
        sql = "select ar.id_codice_art, sum(ar.quantita) quantita
    " +
                "from accettazione a 
    " +
                "inner join accettazione_riga ar on a.id_accettazione = ar.id_accettazione
    " +
                "where a.id_ordine = ? 
    " +
                "group by ar.id_codice_art";
        Map<String,Double> = jdbcTemplate.query(sql, (rs)->{
        Map<String,Double> map = new HashMap<>();
            while(rs.next()){
            map.put(rs.getString("id_codice_art"), rs.getDouble("quantita"));
            }
            return map;
        }, idOrdine);

    【讨论】:

      猜你喜欢
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      相关资源
      最近更新 更多