2012-07-26

Использование SpringData JPA или прощай GenericDao!

Доброго утра всем! Это для кого оно доброе конечно, а всем остальным просто привет.
На нашем воркшопе в Одессе было много общения и обмена опытом. Дмитрий задал интересный вопрос: "А почему вы до сих пор используете GenericDao в примере, это же Spring". Звучало примерно как: "Вы все еще кипятите? Тогда мы идем в вам!".
Ну а теперь за дело. Все мы привыкли начинать написание Persistence слоя с Dao, а более конкретно с объектов  GenericDao. Например таких:

Набор методов может быть различным все зависит от нужд проекта и стиля/вкуса разработчиков. Затем следует имплементация для Hibernate/JPA/JDBC/и.т.п.:

Далее интерфейс для сущности и его имплементация:


Фух. Много букаф. Я думаю что все копировали эти артефакты из проекта в проект с небольшими изменениями. Но это день вчерашний, теперь же давайте поговорим о дне сегодняшнем. Для того, что использовать SpringData для построение JPA репозиториев мы берем для начала документацию, а затем читаем Oliver Gierke.
Ну что ж к делу. Все просто как раз (pom файл):

Два (интерфейс):
Три (контекст):

Кстати XML использовать совсем не обязательно, для любителей @Configuration в SpringData есть полная поддержка plain-Java подхода к конфигурации.
Дело за малым, а именно написать собственно сервис:

Далее пишем тест (код уже приводить не буду) и видим что мы полетели. Какие на мой взгляд за и против:
  • меньше писанины это хорошо
  • возможность генерации методов по названию класса, а именно не надо упражнений с HQL или Criteria - это тоже хорошо
  • дополнительные зависимости это не очень хорошо
  • не очень привычный по сравнению с EMF/SF интерфейс это тоже не очень
  • ну и магия, она всегда опасна
 Так что думайте сами, решайте сами - прощаться с GenericDao или, пока не стоит.
Код, как обычно вы можете найти на нашем GitHub
Дальше Spring Security, SpringData  + NoSQL, @Cachable, Gradle.
Всего всего  - ваши me & eugene

No comments:

Post a Comment