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;
}
}