web-dev-qa-db-fra.com

NamedParameterJdbcTemplate vs JdbcTemplate

Je suis un débutant de Spring3.x, j'apprends le support Spring DAO. Je veux connaître la différence entre NamedParameterJdbcTemplate et JdbcTemplate. Lequel est le meilleur en termes de performances. Et quand opter pour NamedParameterJdbcTemplate et quand opter pour JdbcTemplate. Votre réponse aidera beaucoup les débutants comme moi.

34
Ashok

Lorsque vous utilisez JdbcTemplate, vous lui donnez du SQL qui a un ? espace réservé pour chaque paramètre que vous souhaitez remplacer dans le SQL. Lorsque vous affectez des paramètres dans le code, vous devez passer des arguments dans un tableau et ils sont utilisés dans l'ordre dans lequel ils apparaissent dans le tableau, comme ceci:

Object[] args = new Object[] {"x", "y"};
String sql = "select * from foo where a = ? and b = ?";
jdbcTemplate.query(sql, args, resultSetExtractor);

donc le SQL qui s'exécute est select * from foo where a = 'x' and b = 'y'.

NamedParameterJdbcTemplate vous permet d'attribuer des noms aux espaces réservés de paramètre et de passer dans une carte afin que le modèle puisse faire correspondre les noms de carte aux espaces réservés. Votre code ressemblerait donc à:

String sql = "select * from foo where a = :mya and b = :myb";
Map<String, Object> argMap = new HashMap<String, Object>();
argMap.put("mya", "x");
argMap.put("myb", "y");
namedParameterJdbcTemplate.query(sql, argMap, resultSetExtractor);

générer le même SQL que le premier exemple (et l'exécution de la requête est la partie chronophage, la performance de l'insertion d'argument n'est pas un problème.).

L'idée est que faire correspondre les arguments par leur nom est moins sujet aux erreurs que d'avoir à les spécifier dans un ordre particulier. Dans une application réelle, SQL est généralement stocké dans un fichier distinct du code DAO, et il peut être facile d'obtenir accidentellement les paramètres dans le mauvais ordre.

62
Nathan Hughes

Il n'y a pas de différence de performance mesurable. Le NamedParameterJdbcTemplate est une commodité qui vous permet d'utiliser des paramètres nommés. Si vous êtes vraiment curieux, jetez un œil au code source qui est facilement disponible en téléchargement. Je trouve que la lecture du code source me donne plus de confiance dans les réponses que j'obtiens sur les forums.

4
Xenson