在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定.
在 Spring JDBC 框架中, 绑定 SQL 参数的另一种选择是使用匿名参数(named parameter).
匿名参数: SQL 按名称(以冒号开头)而不是按位置进行指定. 匿名参数更易于维护, 也提升了可读性. 匿名参数由框架类在运行时用占位符取代
匿名参数只在 NamedParameterJdbcTemplate 中得到支持
在使用NamedParameterJdbcTemplate之前需要先在xml文件中进行配置。
<!-- 配置NamedParameterJdbcTemplate,该对象可以使用匿名参数,其没有无参的构造器,所以必须为其构造器指定参数 -->
<bean id="namedParameterJdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"></constructor-arg>
</bean>
/**
* 可以为参数起名字。
* 1、好处:若有多个参数则不用再去对应位置,直接对应参数名,便于维护
*/
@Test
public void testNamedParameterJdbcTemplate() {
NamedParameterJdbcTemplate namedParameterJdbcTemplate = (NamedParameterJdbcTemplate) ctx.getBean("namedParameterJdbcTemplate");
String sql = "INSERT INTO employees(last_name, email,dept_id) VALUES(:lastName, :email,:deptid)";
Map<String, Object> paraMap = new HashMap<>();
paraMap.put("lastName", "Lily");
paraMap.put("email", "Lily@sina.com");
paraMap.put("deptid", 2);
namedParameterJdbcTemplate.update(sql, paraMap);
}