SlideShare a Scribd company logo
Spring Data - новый
взгляд на persistence
Алексей Резчиков
Май 2013
SpringByExample.com.ua
Обо мне
• Java разработчик и тимлид уже более
7-ми лет
• Работаю со Spring c 2006 года
• Последователь XP/Agile/Lean
@ua_spring #jeeconf
• Популяризирую Spring
Framework в рамках
SpringByExample.com.ua
Проголосуем
@ua_spring #jeeconf
Spring Data?
• Проект верхнего уровня SpringSource
• Направлен на упрощение работы с хранилищами
данных
• Реализация подхода polyglot persistence
• Выделение абстракции Repository
• Сегодня детальнее поговорим про Spring Data JPA
@ua_spring #jeeconf
@ua_spring #jeeconf
Generic DAO
@ua_spring #jeeconf
Generic DAO
@ua_spring #jeeconf
Generic DAO
@ua_spring #jeeconf
Persistence Service
@ua_spring #jeeconf
Persistence Service
@ua_spring #jeeconf
Демо приложение
• TODOShare – TODO менеджер
• Spring 3.2.x
• Spring MVC, Spring Security, Spring Data JPA,
Spring Data Solr
• Thymeleaf
• jQuery, Bootstrap
• Solr
• Tomcat 7
• H2
https://github.com/mcgray/TODOShare/
@ua_spring #jeeconf
Раз – два – три
• Подключаем репозитории
• Наследуем интерфейс
• Используем их
@ua_spring #jeeconf
findBy*
• findBy<FieldName>Or<OtherFieldName>OrderBy<Fiel
dName>Desc
• Список возможных комбинаций:
http://static.springsource.org/spring-data/data-
jpa/docs/current/reference/html/jpa.repositories.html
#jpa.sample-app.finders.strategies
@ua_spring #jeeconf
@NamedQuery
@ua_spring #jeeconf
Paging and Ordering
@ua_spring #jeeconf
Predicates & QueryDSL
• Сторонняя библиотека от Mysema
• Наследуемся от QueryDSLPredicateExecutor
• Добавляем инструментальную обработку классов в
билд
• Составляем Predicate
• Передаем его в метод (зачастую вместе с Pageable)
@ua_spring #jeeconf
А если че-то нет?
@ua_spring #jeeconf
А если че-то нет?
@ua_spring #jeeconf
Auditing
@ua_spring #jeeconf
Auditing
@ua_spring #jeeconf
Транзакционность?
• Все методы репозиториев транзакционные
• В каждом конкретном случае стоит задуматься
хватает ли нам этого?
@ua_spring #jeeconf
Не только JPA
• JPA
• JDBC
• Apache Hadoop
• GemFire
• REST
• Redis
• MongoDB
• Neo4j
• e.t.c.
@ua_spring #jeeconf
Критика подхода
• Теряем гибкость
• Приносим дополнительную сложность
• Баги
@ua_spring #jeeconf
Ресурсы
• Project lead:
Oliver Gierke
• Код демо приложения:
https://github.com/mcgray/TODOSh
are/
@ua_spring #jeeconf
• Документация Data JPA:
http://static.springsource.org/spring-data/data-
jpa/docs/current/reference/html/
• Книга:
http://shop.oreilly.com/product/0636920024767.do
Вопросы
@ua_spring #jeeconf
@ua_spring
oleksiy.rezchykov@gmail.com
SpringByExample.com.ua

More Related Content

Viewers also liked (19)

PPTX
Java 8 Puzzlers [as presented at OSCON 2016]
Baruch Sadogursky
 
KEY
Testing Flex RIAs for NJ Flex user group
Viktor Gamov
 
PPTX
Confession of an Engineer
Taras Matyashovsky
 
PPTX
Morning at Lohika 2nd anniversary
Taras Matyashovsky
 
PDF
Couchbase Sydney meetup #1 Couchbase Architecture and Scalability
Karthik Babu Sekar
 
PDF
Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017
Baruch Sadogursky
 
PPTX
Javaeeconf 2016 how to cook apache kafka with camel and spring boot
Ivan Vasyliev
 
PDF
Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...
Baruch Sadogursky
 
PDF
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
Baruch Sadogursky
 
PDF
The Delivery Hero - A Simpsons As A Service Storyboard
Christoph Engelbert
 
PDF
Java 8 Puzzlers as it was presented at Codemash 2017
Baruch Sadogursky
 
PPTX
Boot in Production
Oleksiy Rezchykov
 
PDF
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017
Baruch Sadogursky
 
PDF
Data access 2.0? Please welcome: Spring Data!
Oliver Gierke
 
PDF
Whoops! Where did my architecture go?
Oliver Gierke
 
PDF
SDEC2011 Using Couchbase for social game scaling and speed
Korea Sdec
 
PDF
Hazelcast - In-Memory DataGrid
Christoph Engelbert
 
PDF
Couchbase Singapore Meetup #2: Why Developing with Couchbase is easy !!
Karthik Babu Sekar
 
PPTX
JEEConf 2015 - Introduction to real-time big data with Apache Spark
Taras Matyashovsky
 
Java 8 Puzzlers [as presented at OSCON 2016]
Baruch Sadogursky
 
Testing Flex RIAs for NJ Flex user group
Viktor Gamov
 
Confession of an Engineer
Taras Matyashovsky
 
Morning at Lohika 2nd anniversary
Taras Matyashovsky
 
Couchbase Sydney meetup #1 Couchbase Architecture and Scalability
Karthik Babu Sekar
 
Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017
Baruch Sadogursky
 
Javaeeconf 2016 how to cook apache kafka with camel and spring boot
Ivan Vasyliev
 
Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...
Baruch Sadogursky
 
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
Baruch Sadogursky
 
The Delivery Hero - A Simpsons As A Service Storyboard
Christoph Engelbert
 
Java 8 Puzzlers as it was presented at Codemash 2017
Baruch Sadogursky
 
Boot in Production
Oleksiy Rezchykov
 
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017
Baruch Sadogursky
 
Data access 2.0? Please welcome: Spring Data!
Oliver Gierke
 
Whoops! Where did my architecture go?
Oliver Gierke
 
SDEC2011 Using Couchbase for social game scaling and speed
Korea Sdec
 
Hazelcast - In-Memory DataGrid
Christoph Engelbert
 
Couchbase Singapore Meetup #2: Why Developing with Couchbase is easy !!
Karthik Babu Sekar
 
JEEConf 2015 - Introduction to real-time big data with Apache Spark
Taras Matyashovsky
 

More from Oleksiy Rezchykov (11)

PPTX
How we tested our code "Google way"
Oleksiy Rezchykov
 
PPTX
TestNG vs JUnit: cease fire or the end of the war
Oleksiy Rezchykov
 
PPTX
Spring MVC is still alive
Oleksiy Rezchykov
 
PPTX
Почему это не работает (Записки консультанта)
Oleksiy Rezchykov
 
PPTX
Социология Code Review или что делать, елси ваши тестировщики начали писать т...
Oleksiy Rezchykov
 
PPTX
Recruitment vs Engineering: Кто виноват? и Что делать?
Oleksiy Rezchykov
 
PPTX
!Сделай сам
Oleksiy Rezchykov
 
PPTX
Bdd with java_using_concordion_and_selenium_ui_tests
Oleksiy Rezchykov
 
PPTX
Light weightj2ee developmentusingspring
Oleksiy Rezchykov
 
PPTX
Code review psyhology
Oleksiy Rezchykov
 
PPTX
Story Testing Approach for Enterprise Applications using Selenium Framework
Oleksiy Rezchykov
 
How we tested our code "Google way"
Oleksiy Rezchykov
 
TestNG vs JUnit: cease fire or the end of the war
Oleksiy Rezchykov
 
Spring MVC is still alive
Oleksiy Rezchykov
 
Почему это не работает (Записки консультанта)
Oleksiy Rezchykov
 
Социология Code Review или что делать, елси ваши тестировщики начали писать т...
Oleksiy Rezchykov
 
Recruitment vs Engineering: Кто виноват? и Что делать?
Oleksiy Rezchykov
 
!Сделай сам
Oleksiy Rezchykov
 
Bdd with java_using_concordion_and_selenium_ui_tests
Oleksiy Rezchykov
 
Light weightj2ee developmentusingspring
Oleksiy Rezchykov
 
Code review psyhology
Oleksiy Rezchykov
 
Story Testing Approach for Enterprise Applications using Selenium Framework
Oleksiy Rezchykov
 
Ad

Spring Data: New approach to persistence

Editor's Notes

  • #2: На сегодняшний день большое число приложений содержит более одного хранилища данных. Реляционные и нереляционные базы данных, кеши и datagrid. Необходимо быстро и качественно организовывать работу со всеми хранилищами при этом соблюдая некое однообразие в интерфейсе взаимодействия. Данную задачу успешно решает проект SpringData. Я хотел бы на примере показать как SpringData облегчает жизнь при работе со старым-добрым JPA, а также какие возможности предоставляет при работе с NoSQL решениями.
  • #4: Java?Spring?
  • #7: Пример проблемы которую в первую очередь решает Spring Data
  • #8: Пример проблемы которую в первую очередь решает Spring Data
  • #9: Пример проблемы которую в первую очередь решает Spring Data
  • #14: То чего не получить «из коробки» при использовании Generic Dao
  • #15: То чего не получить «из коробки» при использовании Generic Dao
  • #16: Интерфейс от которого надо наследоватьсяПримеры использования
  • #17: QueryDSL?Наследование интерейсаСоставление предикатовПример
  • #18: Mixin
  • #19: Mixin
  • #22: Как Spring Data поддерживает @Transactinal
  • #23: Polyglot persistence?NoSQLПример –Spring Data Solr
  • #24: Все хорошее уже было сказаноТеряем гибкостьПриносим дополнительную сложностьБагиРешайте сами