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.