一。 在Spring中使用JdbcTemplate进行编码只需要根据明确定义的一组契约来实现架设接口。
PreparedStatementCreator回调接口通过给定的Connection创建一个PreparedStatement,包含SQL和任何相关
的参数。CallableStatementCreator实现同样的处理,只不过它创建的是CallabeStatement.
RowCallbackHandler接口则从数据集的每一行中提取值
1.NamedParameterJdbcTemplate 类
NamedParameterJdbcTemplate类增加了在SQL语句中使用命名参数的支持。它的内部封装啦一个变通的
JdbcTemplate,并作为其代理来完成大部分工作。如果我们需要访问其内部JdbcTemplate的实例,那么需要使用
getJdbcOperations()方法返回JdbcOperations接口
下面是两者之间的不同之处并加以说明.
例 :
public int countOfActorsByFirstName(String firstName){
String sql="select count(0) from ACTOR where first_Name=:firstName";
NamedParameterJdbcTemplate template=new NamedParameterJdbcTemplate(this.getDataSource());
SqlParameterSource namedParameters=new MapSqlParameterSource("first_Name",firstName);
return template.queryForInt(sql,namedParameters);
}
我们也可以使用基于Map风格的名值对将命名参数传递给NamedParameterJdbcTemplate ,它实现啦NamedParameterJdbcOperations接口
剩下的工作将由调用该接口的相应的方法去完成.
public int countOfActorsByFirstName(String firstName){
String sql="select count(0) from ACTOR where first_Name=:firstName";
NamedParameterJdbcTemplate template=new NamedParameterJdbcTemplate(this.getDataSource());
Map namedParameters=new HashMap();
namedParameters.put("first_name",firstName);
return template.queryForInt(sql,namedParameters);
}
2.SimpleJdbcTemplate 类
SimpleJdbcTemplate类是JdbcTemplate类的一个包装器,它利用了Java 5的一些语言特性,比如Varargs
(可变参数)和Autoboxing(自动打包)。
下面首先是使用标准的JdbcTemplate进行数据访问,最后再使用SimpleJdbcTemplate 做同样的事就可以看出它的方便
之处啦。
例: 用JdbcTemplate
public Actor FindActor(Long id){
String sql="select id,first_name,last_name from T_Actor where id=?";
RowMapper mapper=new RowMapper(){
public Object mapRow(ResultSet rs,int rowNum) throws SQLException{
Actor actor=new Actor();
actor.setId(rs.getLong(Long.valueOf(rs.getLong("id"))));
actor.setFirstName(rs.getString("first_name"));
actor.setLastName(rs.getString("last_name"));
return actor;
}
};
JdbcTemplate jdbcTemplate=new JdbcTemplate(this.getDataSource());
return (Actor) JdbcTemplate.queryForObject(sql,mapper,new Object[]{Long.valueOf(id)});
}
用 SimpleJdbcTemplate 类
public Actor FindActor(Long id){
String sql="select id,first_name,last_name from T_Actor where id=?";
ParameterizedRowMapper<Actor> mapper=new ParameterizedRowMapper<Actor>(){
public Actor mapRow(ResultSet rs,int rowNum) throws SQLException{
Actor actor=new Actor();
actor.setId(rs.getLong("id"));
actor.setFirstName(rs.getString("first_name"));
actor.setLastName(rs.getString("last_name"));
return actor;
}
};
SimpleJdbcTemplate simpleJdbcTemplate=new SimpleJdbcTemplate(this.getDataSource());
return (Actor) simpleJdbcTemplate.queryForObject(sql,mapper,id);
}