JdbcTemplate中的PreparedStatementCreator接口用于创建PreparedStatement对象。它有以下两个作用:
- 执行SQL语句时,实现PreparedStatementCreator接口创建PreparedStatement对象,可以避免SQL注入风险。示例:
jdbcTemplate.update(new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement ps = con.prepareStatement("UPDATE user SET name = ? WHERE id = ?");
ps.setString(1, "John");
ps.setInt(2, 10);
return ps;
}
});
- 执行插入操作时,实现PreparedStatementCreator接口可以获取自动生成的键值。示例:
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement ps = con.prepareStatement("INSERT INTO user ...", Statement.RETURN_GENERATED_KEYS);
return ps;
}
}, keyHolder);
Number key = keyHolder.getKey();
所以,PreparedStatementCreator接口主要有两个用途:
- 创建PreparedStatement对象,避免SQL注入风险。
- 获取自动生成的主键值。