Вопрос

Фреймворк Spring имеет два похожих класса:JdbcTemplate - это старый класс Java 1.4, а SimpleJdbcTemplate - более новый, с более приятными методами.

У JdbcTemplate есть метод setQueryTimeout Установить время ожидания, что в основном дает мне доступ к методу с тем же именем в базовом объекте Statement.

Есть ли какой-нибудь способ сделать что-то подобное с SimpleJdbcTemplate Простой шаблон?

Решение:Основываясь на ответе Скаффмана, я создаю SimpleJdbcTemplate возражать самому себе из JdbcTemplate, так что теперь я могу делать все, что захочу.Код:

JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
jdbcTemplate.setQueryTimeout(30);
SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate);

Немного перебор, но дело сделано.

Обновить:Это действительно сложнее, чем необходимо.Смотрите ответ.

Это было полезно?

Решение

SimpleJdbcTemplate не является заменой JdbcTemplate, это просто дружественное к java5 дополнение к нему для определенных операций, которые могут наилучшим образом использовать varargs и generics.

Если вы посмотрите на источник для SimpleJdbcTemplate, вы увидите, что он делегирует всю свою работу JdbcTemplate объекта, и поэтому, установив тайм-аут (или другие параметры) на JdbcTemplate, вы неявно устанавливаете их на SimpleJdbcTemplate также.

Если вы получаете SimpleJdbcTemplate через SimpleJdbcDaoSupport.getSimpleJdbcTemplate(), тогда JdbcTemplate уже будет правильно подключено.

Редактировать:

Например:

public class MyDao extends SimpleJdbcDaoSupport {
    public void doStuff() {
        getJdbcTemplate().setQueryTimeout(x);
        getSimpleJdbcTemplate().execute(...);
    }
}

SimpleJdbcTemplate содержит тот же JdbcTemplate, который извлекается с помощью getJdbcTemplate().

Если вы не расширяете SimpleJdbcDaoSupport, то да, вам нужно вручную создать SimpleJdbcTemplate самостоятельно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top