在JdbcTemplate,這些SQL參數通過一個特殊的占位符“?”符號表示,並通過位置綁定。現在的問題是,每當參數的順序發生了變化,你必須也要改變參數綁定,這是容易出錯,繁瑣的維護。
為了解決這個問題,可以使用“命名參數”,SQL參數是由一個冒號開始後續定義的名稱,而不是位置。在另外的,命名參數只是在SimpleJdbcTemplate類和NamedParameterJdbcTemplate支持。
請參見下麵的三個例子用來使用命名參數在Spring。
示例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
另一個例子,在一個批處理操作語句中使用命名參數。
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); }
下載源代碼 – http://pan.baidu.com/s/1hqPrzJu