2013-05-03 10 views
28

Ich bin ein Anfänger zu Spring3.x, ich lerne Frühling DAO Unterstützung. Ich möchte den Unterschied zwischen NamedParameterJdbcTemplate und JdbcTemplate wissen. Welche ist die beste Leistung? Und wann für NamedParameterJdbcTemplate gehen und wenn JdbcTemplate zu gehen. Ihre Antwort wird den Anfängern wie mir sehr helfen.NamedParameterJdbcTemplate vs JdbcTemplate

+3

Warum liest du das Javadoc nicht? Denkst du nicht, dass es erklären könnte, was der Unterschied ist? Wenn es um Leistung geht, spielt die Art und Weise, wie die Abfrage erstellt und ausgeführt wird, keine Rolle. Was zählt, ist die Abfrage selbst. –

Antwort

4

Es gibt keine messbare Unterschiedsleistung. Das NamedParameterJdbcTemplate ist eine praktische Funktion, mit der Sie benannte Parameter verwenden können. Wenn Sie wirklich neugierig sind, werfen Sie einen Blick auf den Quellcode, der zum Download verfügbar ist. Ich finde, dass das Lesen des Quellcodes mir mehr Vertrauen in die Antworten gibt, die ich in den Foren bekomme.

53

Wenn Sie JdbcTemplate verwenden, geben Sie SQL mit einem ? Platzhalter für jeden Parameter, den Sie in SQL ersetzen möchten. Wenn Sie Parameter in dem Code zuordnen müssen Sie in Argumente in einem Array übergeben und sie in der Reihenfolge zu gewöhnen, in der sie in der Anordnung erscheinen, wie folgt aus:

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

so die SQL, die ausgeführt wird select * from foo where a = 'x' and b = 'y' ist.

Mit NamedParameterJdbcTemplate können Sie den Parameterplatzhaltern Namen zuweisen und eine Map übergeben, damit die Vorlage die Map-Namen den Platzhaltern zuordnen kann. So Ihr Code würde wie folgt aussehen:

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

die gleiche SQL als das erste Beispiel zu erzeugen (und Ausführen der Abfrage der zeitintensivste Teil ist, die Leistung des Arguments Einfügen ist kein Thema.).

Die Idee ist, dass die Übereinstimmung der Argumente nach Namen weniger fehleranfällig ist, als sie in einer bestimmten Reihenfolge angeben zu müssen. In einer realen Anwendung wird SQL typischerweise in einer separaten Datei aus dem DAO-Code gespeichert, und es kann leicht passieren, dass die Parameter versehentlich in der falschen Reihenfolge abgerufen werden.

+0

Irgendein anderer Unterschied ??? – Sarma

+3

@Sarma: das ist keine sehr spezifische Frage. Wenn Sie mehr Details wünschen, können Sie den Quellcode auschecken. –

+0

ist es möglich, NamedParameterJdbcTemplate und JdbcTemplate mit der gleichen Datenquelle zu verwenden? Werden sie sich gegenseitig stören? – MaxG

Verwandte Themen