Главная » Spring » Шаблоны доступа к данным Spring

0

Возможно, вам приходилось летать на самолете. Если это так, вы наверняка согласитесь, что одной из самых важных составляющих перелета является доставка вашего багажа из точки А в точку Б. Этот процесс включает в себя довольно много этапов. Когда вы приходите в аэропорт, ваша первая остановка будет у стойки проверки багажа. Далее служба безопасности проверит его для обеспечения безопас- ности полета. Затем его погрузят на тележку и перевезут к нужному самолету. Если вы летите с пересадкой с рейса на рейс, то и багаж дол- жен быть перемещен вслед за вами. По прибытии в пункт назначения багаж должен быть извлечен из самолета и поставлен на транспортер. Наконец, вы спуститесь в зону получения багажа и заберете его.

Несмотря на большое количество этапов в этом процессе, вы ак- тивно участвуете лишь в паре из них. А перевозчик берет на себя ответственность за выполнение всех остальных необходимых дей- ствий. Лично вы участвуете лишь тогда, когда вам действительно нужно что-то сделать, об остальном же позаботятся без вашего уча- стия. Это отражает сущность мощного шаблона проектирования:

«Шаблонный метод» (Template Method).

Шаблонный метод определяет основу процесса. В нашем при- мере это процесс перемещения багажа из пункта вылета в пункт прибытия. Сам процесс фиксирован – он никогда не меняется. Об- щая последовательность обработки багажа протекает каждый раз одинаково: приемка багажа, погрузка в самолет и т. д. Некоторые этапы процесса также являются фиксированными – всякий раз вы- полняются одни и те же операции. По прибытии самолета в пункт назначения каждый предмет багажа выгружается и размещается на транспортере для выдачи багажа.

Однако в определенные моменты процесс делегирует свою работу подклассу, восполняющему некоторые особенности реализации. Это переменная часть процесса. Например, обработка багажа начинается с его проверки у стойки приема багажа. Эта часть процесса всегда должна следовать первой, так что его местоположение в процессе является фиксированным. Однако регистрация багажа для каждого пассажира отличается, и реализация этой части процесса определя- ется пассажиром. Если говорить в терминах программного обеспе- чения, шаблонный метод делегирует реализацию определенной ча- сти процесса интерфейсу. Различные реализации этого интерфейса определяют конкретные реализации данной части процесса.

И тот же шаблон применяется в Spring для доступа к данным. Независимо от используемых технологий для доступа к данным требуется выполнить определенные шаги. Например, всегда сле- дует создавать подключение к хранилищу данных и освобождать ресурсы по завершении. Это – фиксированные шаги в процессе до- ступа к данным. Но каждый метод доступа к данным имеет свои отличительные особенности. Мы запрашиваем разные объекты и обновляем данные по-разному. Это – переменные шаги в процессе доступа к данным.

Фреймворк Spring разделяет фиксированные и переменные час- ти процесса доступа к данным на два отдельных класса: шаблоны и обратные вызовы. Шаблоны управляют фиксированной частью процесса, а пользовательский программный код доступа к данным обслуживает обратные вызовы. Зоны ответственности этих двух классов изображены на рис. 6.2.

Рис. 6.2. Классы шаблонов DAO в Spring несут ответственность за общие функции доступа к данным. Для реализации специфических функций они могут обращаться

к пользовательским объектам обратного вызова

Как показано на рис. 6.2, классы шаблонов в Spring заведуют фиксированными частями процесса доступа к данным – управле- ние транзакциями, управление ресурсами и обработка исключений. А конкретные особенности доступа к данным, относящиеся к при- ложению, – создание отчетности, связывание параметров и передача результатов – обрабатываются реализацией обратного вызова. На практике такое разделение обеспечивает элегантное решение, по- скольку вам достаточно побеспокоиться лишь о реализации своей части логики доступа к данным.

В Spring имеется несколько шаблонов на выбор, в зависимости от выбранного типа хранилища данных. При использовании JDBC лучшим выбором будет JdbcTemplate. А если вы предпочитаете один из фреймворков объектно-реляционного отображения, то более подхо- дящим выбором будет HibernateTemplate или JpaTemplate. В табл. 6.2 пе- речислены все шаблоны для доступа к данным, имеющиеся в Spring, и их назначение.

Таблица 6.2. В составе Spring имеются несколько шаблонов для доступа к данным с использованием разных механизмов хранения

Класс шаблона (org.springframework.*)

Используется

для взаимодействия с…

jca.cci.core.CciTemplate

Соединениями JCA CCI

jdbc.core.JdbcTemplate

Соединениями JDBC

jdbc.core.namedparam.NamedParameterJdbcTemplate

Соединениями JDBC, поддерживающими именованные параметры

jdbc.core.simple.SimpleJdbcTemplate

Соединениями JDBC, поддерживающими упрощен- ные конструкции Java 5

orm.hibernate.HibernateTemplate

Сеансами Hibernate 2.x

orm.hibernate3.HibernateTemplate

Сеансами Hibernate 3.x

orm.ibatis.SqlMapClientTemplate

Клиентами iBATIS SqlMap

orm.jdo.JdoTemplate

Реализациями Java Data Object

orm.jpa.JpaTemplate

Диспетчерами сущностей Java Persistence API

Как будет показано далее, для использования шаблона доступа к данным достаточно просто определить его в файле с настройками как обычный компонент в контексте Spring и затем связать с объ- ектом DAO в приложении. Или же можно воспользоваться пре-

имуществом поддержки классов DAO в Spring для еще большего упрощения конфигурации приложения. Прямое связывание шабло- нов – это хорошо, но Spring также предоставляет набор удобных ба- зовых классов DAO, которые могут управлять шаблоном без вашего участия. Посмотрим, как действуют эти классы DAO, основанные на шаблонах.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии