2017-09-26 2 views
-2

Je me demandais au cours du développementQuel est le plus efficace PreparedStatementSetter et PreparedStatementCreator au printemps?

Qui est le plus efficace PreparedStatementSetter (Object) et PreparedStatementCreator (Object) et sûr dans le cadre de printemps?

+1

Je doute beaucoup que vous seriez en mesure de faire la différence. Les performances seront entièrement régies par la communication avec la base de données et la performance du plan d'accès. Utilisez celui qui est le plus * pratique *. Méfiez-vous de l'optimisation prématurée. – Andreas

+0

En interne toujours un 'PreparedStatement 'va être utilisé. Vous n'avez pas besoin de le faire vous-même, sauf si vous écrivez des requêtes complexes qui nécessitent une logique supplémentaire. Sinon, utilisez simplement les méthodes 'query (String, ...)'. –

Répondre

1

Vous pouvez utiliser les deux conjointement. PreparedStatementCreator pour créer un objet PreparedStatement. Ensuite PreparedStatementSetter pour définir les valeurs des paramètres.

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

Je préférerais passer une déclaration préparée requête SQL et l'utilisation de PreparedStatementSetter pour définir les valeurs des paramètres comme il minimisera les dépenses du temps/mémoire pour créer PreparedStatementCreator.

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