Spec-Zone .ru
спецификации, руководства, описания, API

21.3.13.1. Используя JdbcTemplate

Spring делает широкое применение шаблона разработки метода Template (см. Шаблонный Образец Метода). Наш непосредственный фокус будет идти JdbcTemplate и связанные классы, определенно NamedParameterJdbcTemplate. Получение дескриптора шаблонных классов и выпуск соединения для доступа к данным, когда каждый необходим.

Следующий пример показывает, как использовать NamedParameterJdbcTemplate в DAO (Объект Доступа к данным) class, чтобы получить случайный город, данный код страны.

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

Фокус в вышеупомянутом коде идет getRandomCityByCountryCode() метод. Мы передаем код страны и используем NamedParameterJdbcTemplate запрашивать для города. Код страны помещается в Карту с ключевой "страной", которая является параметром, называется в SQL-запросе.

Чтобы получить доступ к этому коду, Вы должны сконфигурировать это с Spring, обеспечивая ссылку на источник данных.

<bean id="dao" class="code.Ex2JdbcDao">    <property name="dataSource" ref="dataSource"/></bean>

В этой точке мы можем только захватить ссылку на DAO от Spring и вызова getRandomCityByCountryCode().

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

Этот пример показывает, как использовать классы Spring JDBC абсолютно абстрактного далеко использование традиционных классов JDBC включая Connection и PreparedStatement.