JdbcTemplateでは、SQLパラメータは特殊なプレースホルダ ”



“で表され、位置によってバインドされます。問題は、パラメータの順序が変更されたとき、パラメータのバインディングも変更する必要があるときです。エラーが発生しやすく、保守が面倒です。

これを修正するには、 ”

Named Parameter

“を使用することができますが、SQLパラメーターは開始コロンで定義され、その後に位置ではなく名前が続きます。

さらに、指定されたパラメーターは、

SimpleJdbcTemplate

および

NamedParameterJdbcTemplate

でのみサポートされます。

Springで名前付きパラメータを使用するには、次の3つの例を参照してください。

例1

単一のinsert文で名前付きパラメータを使用する方法を示す例。

   //insert with named parameter
    public void insertNamedParameter(Customer customer){

        String sql = "INSERT INTO CUSTOMER " +
            "(CUST__ID, NAME, AGE) VALUES (:custId, :name, :age)";

        Map<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("custId", customer.getCustId());
        parameters.put("name", customer.getName());
        parameters.put("age", customer.getAge());

        getSimpleJdbcTemplate().update(sql, parameters);

    }

例2

バッチ操作ステートメントで名前付きパラメーターを使用する方法を示す例。

    public void insertBatchNamedParameter(final List<Customer> customers){

        String sql = "INSERT INTO CUSTOMER " +
        "(CUST__ID, NAME, AGE) VALUES (:custId, :name, :age)";

        List<SqlParameterSource> parameters = new ArrayList<SqlParameterSource>();
        for (Customer cust : customers) {
            parameters.add(new BeanPropertySqlParameterSource(cust));
        }

        getSimpleJdbcTemplate().batchUpdate(sql,
            parameters.toArray(new SqlParameterSource[0]));
    }

例3

バッチ操作ステートメントで名前付きパラメーターを使用するもう1つの例。

    public void insertBatchNamedParameter2(final List<Customer> customers){

       SqlParameterSource[]params =
        SqlParameterSourceUtils.createBatch(customers.toArray());

       getSimpleJdbcTemplate().batchUpdate(
        "INSERT INTO CUSTOMER (CUST__ID, NAME, AGE) VALUES (:custId, :name, :age)",
        params);

    }

ソースコードをダウンロードする

ダウンロードする –

Spring-JDBC-Named-Parameter-Example.zip

(15 KB)