33

Spring 的JdbcTemplate抽象提供了很多功能,但它可以以提供对 SQL 注入攻击的保护的方式使用吗?

例如,就像使用PreparedStatement和正确定义的参数化获得的保护一样。

4

1 回答 1

35

它肯定会。此示例直接来自 Spring 3.0 文档(但在 2.* 中相同):

String lastName = this.jdbcTemplate.queryForObject( 
        "select last_name from t_actor where id = ?", 
        String.class, 1212L); 

如您所见,它强烈支持准备好的语句(它必须在幕后为您使用):您使用占位符 ( ?) 指定参数并提供一个对象数组来填充参数。(最后一个参数是预期结果的类型,但这与这个问题不太相关。)

您还可以使用 aNamedParameterJdbcTemplate并在 a 中提供参数Map,这可能效率较低,但肯定更容易记忆。

于 2011-08-31T09:46:59.877 回答