Spring中JdbcTemplate

JdbcTemplate jdbcTemplate==new JdbcTemplate(source);//传入DataSource类型的参数

它封装了jdbc中Connection对象的取得,Statement对象的建立,异常的处理,Statement和Connection的关闭等操作。它是线程安全的。

如:

jdbcTemplate.update("delete from person where id=?",
new Object[]{id}, new int[]{Types.INTEGER});

其中第三个参数可以省略。或者使用PreparedStatementCreator接口来实现:
jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection conn)
throws SQLException {
// TODO Auto-generated method stub
String sql="insert into person(name) values(?)";
PreparedStatement pstmt=conn.prepareStatement(sql);
pstmt.setString(1, person.getName());
return pstmt;
}
});

或者使用PreparedStatementSetter实现setValues方法。

1.批处理可以使用jdbcTemplate的batchUpdate(sql,setter)

其中setter参数实现BatchPreparedStatementSetter接口

2.查询:

queryForObject等方法,queryForList取得多个。

3.查询后的回调方法

实现RowCallbackHandler

 

    public Person getPerson(Integer id) {
final Person person=new Person();
jdbcTemplate.query("select * from person where id=?",
new Object[]{id},
new RowCallbackHandler() {

@Override
public void processRow(ResultSet rs) throws SQLException {
// TODO Auto-generated method stub
person.setId(rs.getInt("id"));
person.setName(rs.getString("name"));
}
}
);
return person;
// TODO Auto-generated method stub
/*return (Person)jdbcTemplate.queryForObject(
"select * from person where id=?",
new Object[]{id},new int[]{Types.INTEGER},
new PersonRowMapper());
*/
}

或者实现RowMapper

 

public class PersonRowMapper implements RowMapper {

@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
// TODO Auto-generated method stub
Person person=new Person();
person.setId(rs.getInt("id"));
person.setName(rs.getString("name"));
return person;
}

}





posted @ 2011-12-30 15:19  tazi  阅读(593)  评论(0编辑  收藏  举报