I did a little testing to see where the time is spent. It appears that most of the time is spent creating the first JdbcTemplate - this is where the error code translation and database metadata lookups take place. After that, the next JdbcTemplate for the same DataSource is instantaneous. Here is the printout from the timings using Rod's StopWatch (part of Spring - org.springframework.util.StopWatch). The JDBC driver also takes a little bit of time to load.
Code:
StopWatch 'JDBC Tests': running time (seconds) = 2.103
-----------------------------------------
ms % Task name
-----------------------------------------
00631 030% Pre-Load JDBC Driver
00310 015% Spring DataSource
01122 053% Spring JdbcTemplate
00000 000% Spring JdbcTemplate2
00030 001% Spring Connection/Query
00010 000% JDBC Connection/Query
Bottom line is that the query overhed is low (10-20 ms) and almost all overhead is in creating the first JdbcTemplate.