2017-09-26 3 views
-2

私は開発中に不思議に思っていたSpringでPreparedStatementSetterとPreparedStatementCreatorの方が効率的ですか?

これは、より効率的なPreparedStatementSetter(Object)とPreparedStatementCreator(Object)とSpringフレームワークで安全ですか?

+1

私はあなたがその違いを知ることができるとは思っていません。パフォーマンスは、データベースとの通信およびアクセス・プランのパフォーマンスによって完全に管理されます。より便利なものを使用する*。早すぎる最適化に注意してください。 – Andreas

+0

内部的に常に 'PreparedStatement'が使用されます。追加のロジックを必要とする複雑なクエリを書くのでない限り、自分で行う必要はありません。それ以外の場合は、 'query(String、...)'メソッドを使用してください。 –

答えて

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

私はそれがPreparedStatementCreatorを作成するための時間/メモリ支出を最小化するようなパラメータ値を設定するために準備文のSQLクエリとPreparedStatementSetterの使用を渡すことを好むだろう。

int r = jdbcTemplate.update(SQL_INSERT, new PreparedStatementSetter() {}; 
関連する問題