NamedParameterJdbcTemplate vs JdbcTemplate

Sono un principiante di Spring3.x, sto imparando il supporto DAO di spring. Voglio sapere la differenza tra NamedParameterJdbcTemplate e JdbcTemplate. Qual è il migliore per mezzo della performance. E quando andare per NamedParameterJdbcTemplate e quando andare per JdbcTemplate. La tua risposta aiuterà molto i principianti come me.

Quando usi JdbcTemplate gli dai l’SQL che ha un ? segnaposto per ciascun parametro che si desidera sostituire nell’SQL. Quando assegni i parametri nel codice devi passare in argomenti in una matrice e vengono utilizzati nell’ordine in cui appaiono nella matrice, come questo:

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

quindi l’SQL che viene eseguito è select * from foo where a = 'x' and b = 'y' .

NamedParameterJdbcTemplate consente di assegnare nomi ai segnaposto dei parametri e di passare in una mappa in modo che il modello possa abbinare i nomi delle mappe ai segnaposto. Quindi il tuo codice sarà simile a:

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

generando lo stesso SQL del primo esempio (e l’esecuzione della query è la parte che richiede molto tempo, le prestazioni dell’inserimento dell’argomento non sono un problema).

L’idea è che la corrispondenza degli argomenti per nome è meno soggetta a errori rispetto alla necessità di specificarli in un ordine particolare. In un’applicazione reale, in genere SQL viene archiviato in un file separato dal codice DAO e potrebbe essere facile ottenere accidentalmente i parametri nell’ordine errato.

Non c’è nessuna differenza misurabile. NamedParameterJdbcTemplate è una comodità che consente di utilizzare parametri con nome. Se sei davvero curioso, dai un’occhiata al codice sorgente che è prontamente disponibile per il download. Trovo che leggere il codice sorgente mi dà più fiducia nelle risposte che ottengo sui forum.