在 JDBC 模板中使用具名参数
在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定.
在 Spring JDBC 框架中, 绑定 SQL 参数的另一种选择是使用具名参数(named parameter).
具名参数: SQL 按名称(以冒号开头)而不是按位置进行指定. 具名参数更易于维护, 也提升了可读性. 具名参数由框架类在运行时用占位符取代
具名参数只在 NamedParameterJdbcTemplate 中得到支持
在 SQL 语句中使用具名参数时, 可以在一个 Map 中提供参数值, 参数名为键
也可以使用 SqlParameterSource 参数
批量更新时可以提供 Map 或 SqlParameterSource 的数组
示例:
可以为参数起名字
1.好处:若有多个参数,则不用再去对应位置,直接对应参数名,便于维护
2.缺点:较为麻烦
1 2 3 4 5 6 7 8 9 10
| @Test public void testNamedParameterJdbcTemplate() { String sql = "insert into employees(id, last_name, email, dept_id) values(:id, :ln, :email, :deptid)"; Map<String, Object> paramMap = new HashMap<>(); paramMap.put("id", 11); paramMap.put("ln", "FF"); paramMap.put("email", "ff@"); paramMap.put("deptid", 2); namedParameterJdbcTemplate.update(sql, paramMap); }
|
使用具名参数时,可以使用 update(String sql, SqlParameterSource paramSource)
1.SQL 语句中的参数名和类的属性一致
2.使用 SqlParameterSource 的 BeanPropertySqlParameterSource 实现类作为参数
1 2 3 4 5 6 7 8 9 10 11
| @Test public void testNamedParameterJdbcTemplate2() { String sql = "insert into employees(id, last_name, email, dept_id) values(:id, :lastName, :email, :deptid)"; Employee employee = new Employee(); employee.setLastName("00"); employee.setId(12); employee.setEmail("00@"); employee.setDeptid(2); SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(employee); namedParameterJdbcTemplate.update(sql, parameterSource); }
|