Лучше ли создавать новый JdbcTemplate в каждом запросе или внедрять один везде? - PullRequest
7 голосов
/ 17 октября 2011

У меня есть библиотека Java, где я обращаюсь к БД через JDBC, используя поддержку Spring JDBC. Эта библиотека содержит приблизительно класс DAO для каждой таблицы, к которой мне нужно получить доступ, а их более ста. В настоящее время я создаю новый JdbcTemplate или один из его вариантов каждый раз, когда мне нужно выполнить новый запрос. Это считается хорошей практикой, или я должен использовать как можно больше одного JdbcTemplate? Я действительно видел примеры обоих подходов в книгах или онлайн-документации.

Контекст является приложением J2EE, но в идеале код должен использоваться в разных контекстах, например, в автономных тестах или средствах поддержки командной строки.

Ответы [ 3 ]

4 голосов
/ 17 октября 2011

Внедрить один, зачем заниматься инстанцированием?(Неясно, имеете ли вы в виду «создание экземпляра в контексте Spring» или «создание экземпляра с использованием new».)

Большинство примеров, которые я видел, делают это в конфигурации, я даже не уверен, чтовидел их созданные вручную вне демонстрационного / тестового кода.Я вижу небольшую выгоду в том, чтобы делать это вручную, и ноль, если это делается вне Spring.

3 голосов
/ 26 октября 2011

Хотя при создании нового JdbcTemplate не нужно много накладных расходов, особого смысла нет. Класс JdbcDaoSupport, абстрактный класс, полезный для обработки DAO, основанных на JdbcTemplate, последовательно позволяет каждому DAO либо внедрять DataSource (и покрывать оболочки, создает экземпляр JdbcTemplate на основе этого DataSource), либо внедрять JdbcTemplate. Поскольку вы можете сделать и то, и другое, вы сделаете последнее, только если хотите настроить JdbcTemplate, установив одно или несколько из следующих свойств:

  • FetchSize
  • ignoreWarnings
  • maxRows
  • nativeJdbcExtractor
  • QueryTimeout
  • skipResultsProcessing
  • exceptionTranslator

Скорее всего, у вас будет один шаблон JdbcTemplate для каждой комбинации этих свойств. Все они имеют значения по умолчанию, поэтому их необходимо установить, только если вы собираетесь их переопределить. В зависимости от разнообразия ваших DAO, у вас может быть один или несколько. Или в случае расширения JdbcDaoSupport у вас может не быть ни одного, если каждый DAO просто обернет источник данных в JdbcTemplate по умолчанию под покровами.

0 голосов
/ 22 января 2016

Экземпляры класса JdbcTemplate после настройки являются поточно-ориентированными, поэтому вы можете настроить один экземпляр JdbcTemplate и затем безопасно внедрить эту общую ссылку в несколько DAO (или репозиториев).Для получения дополнительной информации: JdbcTemplate-idioms

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...