2013-05-03 14 views
28

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

+3

Perché non leggi la javadoc? Non pensi che potrebbe spiegare qual è la differenza? Quando si tratta di prestazioni, il modo in cui la query viene creata ed eseguita non ha molta importanza. Ciò che conta è la query stessa. –

risposta

4

Non c'è nessuna differenza misurabile. NamedParameterJdbcTemplate è una comodità che consente di utilizzare parametri con nome. Se siete davvero curiosi date 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.

53

Quando si utilizza JdbcTemplate, si specifica SQL con un segnaposto ? per ogni parametro che si desidera sostituire nell'SQL. Quando si assegna i parametri nel codice si deve passare in argomenti in un array e si abitua nell'ordine in cui appaiono nella matrice, in questo modo:

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

modo il codice 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 corrispondere ai nomi delle mappe ai segnaposto. Quindi, il codice sarà simile:

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

generare lo stesso SQL come il primo esempio (e l'esecuzione della query è la parte ad alta intensità di tempo, le prestazioni del inserimento argomento è un non-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.

+0

Qualunque altra differenza ??? – Sarma

+3

@Sarma: non è una domanda molto specifica. se vuoi maggiori dettagli puoi controllare il codice sorgente. –

+0

è possibile utilizzare sia NamedParameterJdbcTemplate che JdbcTemplate con la stessa origine dati? Interferiranno l'un l'altro? – MaxG

Problemi correlati