10bet网址
Connectors and APIs Manual
Download this Manual

3.13.1 UsingJdbcTemplate

Spring makes extensive use of the Template method design pattern (seeTemplate Method Pattern). Our immediate focus will be on theJdbcTemplateand related classes, specificallyNamedParameterJdbcTemplate。模板类的手le obtaining and releasing a connection for data access when one is needed.

The next example shows how to useNamedParameterJdbcTemplateinside of a DAO (Data Access Object) class to retrieve a random city given a country code.

public class Ex2JdbcDao { /** * Data source reference which will be provided by Spring. */ private DataSource dataSource; /** * Our query to find a random city given a country code. Notice * the ":country" parameter toward the end. This is called a * named parameter. */ private String queryString = "select Name from City " + "where CountryCode = :country order by rand() limit 1"; /** * Retrieve a random city using Spring JDBC access classes. */ public String getRandomCityByCountryCode(String cntryCode) { // A template that permits using queries with named parameters NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(dataSource); // A java.util.Map is used to provide values for the parameters Map params = new HashMap(); params.put("country", cntryCode); // We query for an Object and specify what class we are expecting return (String)template.queryForObject(queryString, params, String.class); } /** * A JavaBean setter-style method to allow Spring to inject the data source. * @param dataSource */ public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } }

The focus in the above code is on thegetRandomCityByCountryCode()method. We pass a country code and use theNamedParameterJdbcTemplateto query for a city. The country code is placed in a Map with the key "country", which is the parameter is named in the SQL query.

To access this code, you need to configure it with Spring by providing a reference to the data source.

  

At this point, we can just grab a reference to the DAO from Spring and callgetRandomCityByCountryCode()

// Create the application context ApplicationContext ctx = new ClassPathXmlApplicationContext("ex2appContext.xml"); // Obtain a reference to our DAO Ex2JdbcDao dao = (Ex2JdbcDao) ctx.getBean("dao"); String countryCode = "USA"; // Find a few random cities in the US for(int i = 0; i < 4; ++i) System.out.printf("A random city in %s is %s%n", countryCode, dao.getRandomCityByCountryCode(countryCode));

This example shows how to use Spring's JDBC classes to completely abstract away the use of traditional JDBC classes includingConnectionandPreparedStatement