【问题标题】:Which is more efficient PreparedStatementSetter and PreparedStatementCreator in Spring?Spring中的PreparedStatementSetter和PreparedStatementCreator哪个更高效?
【发布时间】:2018-03-07 05:12:18
【问题描述】:

我在开发过程中想知道

在spring框架中PreparedStatementSetter(Object)和PreparedStatementCreator(Object)哪个更高效、更安全?

【问题讨论】:

  • 我非常怀疑您能否分辨出其中的区别。性能将完全受与数据库的通信以及访问计划性能的控制。使用更方便的那个。谨防过早的优化。
  • 内部总是使用PreparedStatement。您不需要自己做,除非您正在编写一些需要额外逻辑的复杂查询。否则,只需使用 query(String, ...) 方法。

标签: java database spring jsp frameworks


【解决方案1】:

您可以同时使用两者。 PreparedStatementCreator 创建一个 PreparedStatement 对象。然后 PreparedStatementSetter 设置参数值。

String machaceksName = (String) jdbcTemplate.query(new PreparedStatementCreator() {
  public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
    return connection
        .prepareStatement("select first_name from customer where last_name like ?");
  }
}, new PreparedStatementSetter() {
  public void setValues(PreparedStatement preparedStatement) throws SQLException {
    preparedStatement.setString(1, "Mach%");
  }
}, new ResultSetExtractor() {
  public Object extractData(ResultSet resultSet) throws SQLException, DataAccessException {
    if (resultSet.next()) {
      return resultSet.getLong(1);
    }
    return null;
  }
});

我更愿意传递一个 Prepared Statement SQL 查询并使用 PreparedStatementSetter 来设置参数值,因为它将最大限度地减少创建 PreparedStatementCreator 的时间/内存花费。

 int r = jdbcTemplate.update(SQL_INSERT, new PreparedStatementSetter() {};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2017-11-30
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2020-05-27
    相关资源
    最近更新 更多