SlideShare uma empresa Scribd logo
1 de 25
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

Mais conteúdo relacionado

Destaque

Java 8 Puzzlers [as presented at OSCON 2016]
Java 8 Puzzlers [as presented at  OSCON 2016]Java 8 Puzzlers [as presented at  OSCON 2016]
Java 8 Puzzlers [as presented at OSCON 2016]Baruch Sadogursky
 
Testing Flex RIAs for NJ Flex user group
Testing Flex RIAs for NJ Flex user groupTesting Flex RIAs for NJ Flex user group
Testing Flex RIAs for NJ Flex user groupViktor Gamov
 
Morning at Lohika 2nd anniversary
Morning at Lohika 2nd anniversaryMorning at Lohika 2nd anniversary
Morning at Lohika 2nd anniversaryTaras Matyashovsky
 
Couchbase Sydney meetup #1 Couchbase Architecture and Scalability
Couchbase Sydney meetup #1    Couchbase Architecture and ScalabilityCouchbase Sydney meetup #1    Couchbase Architecture and Scalability
Couchbase Sydney meetup #1 Couchbase Architecture and ScalabilityKarthik Babu Sekar
 
Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017
Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017
Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017Baruch Sadogursky
 
Javaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring bootJavaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring bootIvan Vasyliev
 
Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...
Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...
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...
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...Baruch Sadogursky
 
The Delivery Hero - A Simpsons As A Service Storyboard
The Delivery Hero - A Simpsons As A Service StoryboardThe Delivery Hero - A Simpsons As A Service Storyboard
The Delivery Hero - A Simpsons As A Service StoryboardChristoph Engelbert
 
Java 8 Puzzlers as it was presented at Codemash 2017
Java 8 Puzzlers as it was presented at Codemash 2017Java 8 Puzzlers as it was presented at Codemash 2017
Java 8 Puzzlers as it was presented at Codemash 2017Baruch Sadogursky
 
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017Baruch Sadogursky
 
Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!Oliver Gierke
 
Whoops! Where did my architecture go?
Whoops! Where did my architecture go?Whoops! Where did my architecture go?
Whoops! Where did my architecture go?Oliver Gierke
 
SDEC2011 Using Couchbase for social game scaling and speed
SDEC2011 Using Couchbase for social game scaling and speedSDEC2011 Using Couchbase for social game scaling and speed
SDEC2011 Using Couchbase for social game scaling and speedKorea Sdec
 
Couchbase Singapore Meetup #2: Why Developing with Couchbase is easy !!
Couchbase Singapore Meetup #2:  Why Developing with Couchbase is easy !! Couchbase Singapore Meetup #2:  Why Developing with Couchbase is easy !!
Couchbase Singapore Meetup #2: Why Developing with Couchbase is easy !! Karthik Babu Sekar
 
JEEConf 2015 - Introduction to real-time big data with Apache Spark
JEEConf 2015 - Introduction to real-time big data with Apache SparkJEEConf 2015 - Introduction to real-time big data with Apache Spark
JEEConf 2015 - Introduction to real-time big data with Apache SparkTaras Matyashovsky
 

Destaque (19)

Java 8 Puzzlers [as presented at OSCON 2016]
Java 8 Puzzlers [as presented at  OSCON 2016]Java 8 Puzzlers [as presented at  OSCON 2016]
Java 8 Puzzlers [as presented at OSCON 2016]
 
Testing Flex RIAs for NJ Flex user group
Testing Flex RIAs for NJ Flex user groupTesting Flex RIAs for NJ Flex user group
Testing Flex RIAs for NJ Flex user group
 
Confession of an Engineer
Confession of an EngineerConfession of an Engineer
Confession of an Engineer
 
Morning at Lohika 2nd anniversary
Morning at Lohika 2nd anniversaryMorning at Lohika 2nd anniversary
Morning at Lohika 2nd anniversary
 
Couchbase Sydney meetup #1 Couchbase Architecture and Scalability
Couchbase Sydney meetup #1    Couchbase Architecture and ScalabilityCouchbase Sydney meetup #1    Couchbase Architecture and Scalability
Couchbase Sydney meetup #1 Couchbase Architecture and Scalability
 
Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017
Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017
Patterns and antipatterns in Docker image lifecycle @ DevOpsDays Charlotte 2017
 
Javaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring bootJavaeeconf 2016 how to cook apache kafka with camel and spring boot
Javaeeconf 2016 how to cook apache kafka with camel and spring boot
 
Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...
Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...
Patterns and antipatterns in Docker image lifecycle as was presented at Oracl...
 
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
Patterns and antipatterns in Docker image lifecycle as was presented at Scale...
 
The Delivery Hero - A Simpsons As A Service Storyboard
The Delivery Hero - A Simpsons As A Service StoryboardThe Delivery Hero - A Simpsons As A Service Storyboard
The Delivery Hero - A Simpsons As A Service Storyboard
 
Java 8 Puzzlers as it was presented at Codemash 2017
Java 8 Puzzlers as it was presented at Codemash 2017Java 8 Puzzlers as it was presented at Codemash 2017
Java 8 Puzzlers as it was presented at Codemash 2017
 
Boot in Production
Boot in ProductionBoot in Production
Boot in Production
 
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017
 
Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!
 
Whoops! Where did my architecture go?
Whoops! Where did my architecture go?Whoops! Where did my architecture go?
Whoops! Where did my architecture go?
 
SDEC2011 Using Couchbase for social game scaling and speed
SDEC2011 Using Couchbase for social game scaling and speedSDEC2011 Using Couchbase for social game scaling and speed
SDEC2011 Using Couchbase for social game scaling and speed
 
Hazelcast - In-Memory DataGrid
Hazelcast - In-Memory DataGridHazelcast - In-Memory DataGrid
Hazelcast - In-Memory DataGrid
 
Couchbase Singapore Meetup #2: Why Developing with Couchbase is easy !!
Couchbase Singapore Meetup #2:  Why Developing with Couchbase is easy !! Couchbase Singapore Meetup #2:  Why Developing with Couchbase is easy !!
Couchbase Singapore Meetup #2: Why Developing with Couchbase is easy !!
 
JEEConf 2015 - Introduction to real-time big data with Apache Spark
JEEConf 2015 - Introduction to real-time big data with Apache SparkJEEConf 2015 - Introduction to real-time big data with Apache Spark
JEEConf 2015 - Introduction to real-time big data with Apache Spark
 

Semelhante a Spring Data: New approach to persistence

Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейГотовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейSkillFactory
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9JavaDayUA
 
Что такое современная Frontend разработка
Что такое современная Frontend разработкаЧто такое современная Frontend разработка
Что такое современная Frontend разработкаDevOWL Meetup
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended versionIvan Krylov
 
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  МоскалёвПереводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван МоскалёвYandex
 

Semelhante a Spring Data: New approach to persistence (7)

Spring MVC is still alive
Spring MVC is still aliveSpring MVC is still alive
Spring MVC is still alive
 
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейГотовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
 
Functional monitoring
Functional monitoringFunctional monitoring
Functional monitoring
 
Что такое современная Frontend разработка
Что такое современная Frontend разработкаЧто такое современная Frontend разработка
Что такое современная Frontend разработка
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended version
 
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  МоскалёвПереводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван  Москалёв
Переводим без интернета: как мы делали Яндекс.Перевод для iOS, Иван Москалёв
 

Mais de Oleksiy Rezchykov

How we tested our code "Google way"
How we tested our code "Google way"How we tested our code "Google way"
How we tested our code "Google way"Oleksiy Rezchykov
 
TestNG vs JUnit: cease fire or the end of the war
TestNG vs JUnit: cease fire or the end of the warTestNG vs JUnit: cease fire or the end of the war
TestNG vs JUnit: cease fire or the end of the warOleksiy Rezchykov
 
Почему это не работает (Записки консультанта)
Почему это не работает (Записки консультанта)Почему это не работает (Записки консультанта)
Почему это не работает (Записки консультанта)Oleksiy Rezchykov
 
Социология Code Review или что делать, елси ваши тестировщики начали писать т...
Социология Code Review или что делать, елси ваши тестировщики начали писать т...Социология Code Review или что делать, елси ваши тестировщики начали писать т...
Социология Code Review или что делать, елси ваши тестировщики начали писать т...Oleksiy Rezchykov
 
Recruitment vs Engineering: Кто виноват? и Что делать?
Recruitment vs Engineering: Кто виноват? и Что делать?Recruitment vs Engineering: Кто виноват? и Что делать?
Recruitment vs Engineering: Кто виноват? и Что делать?Oleksiy Rezchykov
 
Bdd with java_using_concordion_and_selenium_ui_tests
Bdd with java_using_concordion_and_selenium_ui_testsBdd with java_using_concordion_and_selenium_ui_tests
Bdd with java_using_concordion_and_selenium_ui_testsOleksiy Rezchykov
 
Light weightj2ee developmentusingspring
Light weightj2ee developmentusingspringLight weightj2ee developmentusingspring
Light weightj2ee developmentusingspringOleksiy Rezchykov
 
Story Testing Approach for Enterprise Applications using Selenium Framework
Story Testing Approach for Enterprise Applications using Selenium FrameworkStory Testing Approach for Enterprise Applications using Selenium Framework
Story Testing Approach for Enterprise Applications using Selenium FrameworkOleksiy Rezchykov
 

Mais de Oleksiy Rezchykov (10)

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

Spring Data: New approach to persistence

Notas do Editor

  1. На сегодняшний день большое число приложений содержит более одного хранилища данных. Реляционные и нереляционные базы данных, кеши и datagrid. Необходимо быстро и качественно организовывать работу со всеми хранилищами при этом соблюдая некое однообразие в интерфейсе взаимодействия. Данную задачу успешно решает проект SpringData. Я хотел бы на примере показать как SpringData облегчает жизнь при работе со старым-добрым JPA, а также какие возможности предоставляет при работе с NoSQL решениями.
  2. Java?Spring?
  3. Пример проблемы которую в первую очередь решает Spring Data
  4. Пример проблемы которую в первую очередь решает Spring Data
  5. Пример проблемы которую в первую очередь решает Spring Data
  6. То чего не получить «из коробки» при использовании Generic Dao
  7. То чего не получить «из коробки» при использовании Generic Dao
  8. Интерфейс от которого надо наследоватьсяПримеры использования
  9. QueryDSL?Наследование интерейсаСоставление предикатовПример
  10. Mixin
  11. Mixin
  12. Как Spring Data поддерживает @Transactinal
  13. Polyglot persistence?NoSQLПример –Spring Data Solr
  14. Все хорошее уже было сказаноТеряем гибкостьПриносим дополнительную сложностьБагиРешайте сами