日期:2014-05-16  浏览次数:20601 次

使用spring的jdbcTemplate-----使用具名参数

在JDBC用法中,SQL参数是用占位符?表示,并且受到位置的限制,定位参数的问题在于,一旦参数的位置发生变化,必须改变

参数的绑定,在Spring JDBC中,绑定SQL参数的另一种选择是使用具名参数,SQL具名参数是按照名称绑定,而不是位置绑定,

具名参数只在SImpleJdbcTemplate和NamedParameterJdbcTemplate中得到支持.

?

实现方法

?

public class JdbcUserDao extends SimpleJdbcDaoSupport implements UserDao{

	public void insert(User user){

		String sql="insert into user values (:username,:password)";

		Map<String,Object> pramters = new Map<String,Object>();
		pramters.put("username",user.getUsername());
		pramters.put("password",user.getPassword());
		this.getSimpleJdbcTemplate().update(sql,pramters);
	}
}

?

?

?

也可以提供一个SQL参数源,它将为具体参数提供SQL参数值,SQLParamterSource接口有俩个实现,其实的基本实现就是MapSqlParamterSource,它将Map包装起来作为参数源。

public class JdbcUserDao extends SimpleJdbcDaoSupport implements UserDao{

	public void insert(User user){

		String sql = "insert into user values(:username,:password)";

		Map<String,Object> paramters = new Map<String,Object>();
		paramters.put("username",user.getUsername());
		paramters.put("password",user.getPassword());

		SqlParamterSource source= new MapSqlParamterSource(paramters);
		this.getSimpleJdbcTemplate().update(sql,source);
	}
}

?

?

SqlParamterSource的另一个实现是BeanPropertySqlParamterSource,它将普通的java对象包装起来作为SQL参数源,对于每个具名参数,会用同名的属性作为参数值

public class JdbcUserDao extends SimpleJdbcDaoSupport implements UserDao{

	public void insert(User user){

		String sql ="insert into user values(:username,:password)";
		
		SqlParamterSource parameterSource = new BeanPropertySqlParamterSource(user);
		this.getSimpleJdbcTempalte().update(sql,paramterSource);
	}
}

?

?

具名参数也可以用在批量更新中,可以给参数值提供一个Map数组或SqlParamterSource数组,

public class JdbcUserDao extends SimpleJdbcDaoSupport implements UserDao{

	public void insertBetch(List<User> user){

		String sql = "insert into user values(:username,:password)";

		List<SqlParamterSource> paramters = new ArrayList<SqlParamterSource()>();
		for(User u:user){
			paramters.add(new BeanPropertySqlParamterSource(u));
		}
		this.getSimpleJdbcTemplate().batchUpdate(sql,paramters.toArray(new SqlParamterSource[0]));
	}
}

?