SimpleJdbcTemplateのSpring名前付きパラメータの例
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); }