JdbcTemplate中的PreparedStatementCreator有什么作用?

JdbcTemplate中的PreparedStatementCreator接口用于创建PreparedStatement对象。它有以下两个作用:

  1. 执行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;
    } 
});
  1. 执行插入操作时,实现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接口主要有两个用途:

  1. 创建PreparedStatement对象,避免SQL注入风险。
  2. 获取自动生成的主键值。