日期:2014-05-16 浏览次数:20601 次
在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])); } }
?