Spring框架自学之路(九)

(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);
	}
    可以看出来,第二种方法比较简单且易于维护。


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭