Java 如何将多个命名参数传递给Spring JdbcTemplate?

Java 如何将多个命名参数传递给Spring JdbcTemplate?,java,database,spring,jdbc,Java,Database,Spring,Jdbc,我在一把弹簧刀中有以下代码,它工作得很好- Object args[] = { userId, restaurantId }; int userOrderCount = getJdbcTemplate() .queryForInt( "SELECT COUNT(orderid) FROM orders WHERE useridfk_order = ? AND restaurantidfk_order = ?", args ); 但是,如果我

我在一把弹簧刀中有以下代码,它工作得很好-

Object args[] = { userId, restaurantId };
int userOrderCount = getJdbcTemplate()
    .queryForInt(
         "SELECT COUNT(orderid) FROM orders WHERE useridfk_order = ? AND restaurantidfk_order = ?", 
         args
    );
但是,如果我决定在查询中使用NamedParameters,如下所示-

int userOrderCount = getNamedParameterJdbcTemplate()
    .queryForInt(
         "SELECT COUNT(orderid) FROM orders WHERE useridfk_order = :userId AND restaurantidfk_order = :restaurantId", 
         new MapSqlParameterSource(":restaurantId", restaurantId)
             .addValue(":userId", userId)
    );
我得到了这个例外-

org.springframework.dao.InvalidDataAccessApiUsageException: No value supplied for the SQL parameter 'userId': No value registered for key 'userId'.
我知道一句黄金格言“不破不修”

但是,我还是忍不住想知道为什么会发生这种情况?

使用这个

new MapSqlParameterSource("restaurantId", restaurantId)
    .addValue("userId", userId);
而不是这个

new MapSqlParameterSource(":restaurantId", restaurantId)
    .addValue(":userId", userId);
(+1)正确:为了让读者更清楚:map参数前面不能有