(09Day)
前边我们讲到了spring中JDBC的操作模板JDBCTemplate,其中在写SQL语句的时候,里边有好多的问号,不知道你有没有想过如果我们有大量的参数的时候,那维护起来岂不是很麻烦。所以在 Spring JDBC 框架中, 绑定 SQL 参数的另一种选择是使用具名参数。
那么什么事具名参数呢,所谓具名参数就是SQL 按名称(以冒号开头)而不是按位置进行指定. 具名参数更易于维护, 也提升了可读性. 具名参数由框架类在运行时用占位符取代。注意具名参数只在 NamedParameterJdbcTemplate 中得到支持 。接下来我们来看看具体是怎么用的。
首先先在spring配置文件中配置NamedParameterJdbcTemplate
<!-- 配置 NamedParameterJdbcTemplate, 该对象可以使用具名参数, 其没有无参数的构造器, 所以必须为其构造器指定参数 -->
<bean id="namedParameterJdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"></constructor-arg>
</bean>
随后在使用具名参数时候有两种方法可以使用一种是通过map键入值,另外一种是通过对象键入,具体来看看下面的代码。
/**
* 使用NamedParameterTemplate
* 可以为参数起名字
* 1.好处:若有多个参数,则不用再去对应位置, 直接对应参数名, 便于维护。
* 2.缺点:较为麻烦
*/
@Test
public void testNamedParameterJdbcTemplate(){
String sql = "INSERT INTO User (User_Name,LoginName,LoginPwd) VALUES(:un,:loginname,:loginpwd)";
Map<String,Object> paramMap = new HashMap<String, Object>();
paramMap.put("un", "zzz");
paramMap.put("loginname", "xxx");
paramMap.put("loginpwd", "0000");
namedParameterTemplate.update(sql, paramMap);
}
/**
* 使用具名参数时, 可以使用 update(String sql, SqlParameterSource paramSource) 方法进行更新操作
* sql语句中的具名参数要和类的属性名一致
* 使用 SqlParameterSource 的 BeanPropertySqlParameterSource 实现类作为参数.
*/
@Test
public void testNamedParameterJdbcTemplate2(){
String sql = "INSERT INTO User (User_Name,LoginName,LoginPwd) VALUES(:userName,:loginName,:loginPwd)";
User user = new User();
user.setUserName("wjl");
user.setLoginName("w61");
user.setLoginPwd("618");
SqlParameterSource paramSource = new BeanPropertySqlParameterSource(user);
namedParameterTemplate.update(sql, paramSource);
}
可以看出来,第二种方法比较简单且易于维护。