spring data: new approach to persistence
DESCRIPTION
My presentation for the JeeConf 2013 (24-25th of May, Kyiv, Ukraine)TRANSCRIPT
![Page 1: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/1.jpg)
Spring Data - новый взгляд на
persistenceАлексей Резчиков
Май 2013
SpringByExample.com.ua
![Page 2: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/2.jpg)
@ua_spring #jeeconf
Обо мне• Java разработчик и тимлид уже
более 7-ми лет• Работаю со Spring c 2006 года• Последователь XP/Agile/Lean
• Популяризирую Spring Framework в рамках SpringByExample.com.ua
![Page 3: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/3.jpg)
@ua_spring #jeeconf
Проголосуем
![Page 4: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/4.jpg)
@ua_spring #jeeconf
Spring Data?• Проект верхнего уровня SpringSource• Направлен на упрощение работы с
хранилищами данных• Реализация подхода polyglot persistence• Выделение абстракции Repository• Сегодня детальнее поговорим про Spring Data
JPA
![Page 5: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/5.jpg)
@ua_spring #jeeconf
![Page 6: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/6.jpg)
@ua_spring #jeeconf
Generic DAO
![Page 7: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/7.jpg)
@ua_spring #jeeconf
Generic DAO
![Page 8: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/8.jpg)
@ua_spring #jeeconf
Generic DAO
![Page 9: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/9.jpg)
@ua_spring #jeeconf
Persistence Service
![Page 10: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/10.jpg)
@ua_spring #jeeconf
Persistence Service
![Page 11: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/11.jpg)
@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/
![Page 12: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/12.jpg)
@ua_spring #jeeconf
Раз – два – три• Подключаем репозитории• Наследуем интерфейс• Используем их
![Page 13: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/13.jpg)
@ua_spring #jeeconf
findBy*• findBy<FieldName>Or<OtherFieldName>OrderBy
<FieldName>Desc
• Список возможных комбинаций:http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/jpa.repositories.html#jpa.sample-app.finders.strategies
![Page 14: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/14.jpg)
@ua_spring #jeeconf
@NamedQuery
![Page 15: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/15.jpg)
@ua_spring #jeeconf
Paging and Ordering
![Page 16: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/16.jpg)
Predicates & QueryDSL
• Сторонняя библиотека от Mysema• Наследуемся от QueryDSLPredicateExecutor• Добавляем инструментальную обработку
классов в билд• Составляем Predicate• Передаем его в метод (зачастую вместе с
Pageable)
@ua_spring #jeeconf
![Page 17: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/17.jpg)
@ua_spring #jeeconf
А если че-то нет?
![Page 18: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/18.jpg)
@ua_spring #jeeconf
А если че-то нет?
![Page 19: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/19.jpg)
@ua_spring #jeeconf
Auditing
![Page 20: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/20.jpg)
@ua_spring #jeeconf
Auditing
![Page 21: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/21.jpg)
@ua_spring #jeeconf
Транзакционность?• Все методы репозиториев транзакционные• В каждом конкретном случае стоит
задуматься хватает ли нам этого?
![Page 22: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/22.jpg)
@ua_spring #jeeconf
Не только JPA• JPA• JDBC• Apache Hadoop• GemFire• REST• Redis• MongoDB• Neo4j• e.t.c.
![Page 23: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/23.jpg)
@ua_spring #jeeconf
Критика подхода• Теряем гибкость• Приносим дополнительную сложность• Баги
![Page 24: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/24.jpg)
@ua_spring #jeeconf
Ресурсы• Project lead: Oliver Gierke
• Код демо приложения:https://github.com/mcgray/TODOShare/
• Документация Data JPA:http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/• Книга: http://shop.oreilly.com/product/0636920024767.do
![Page 25: Spring Data: New approach to persistence](https://reader034.vdocuments.mx/reader034/viewer/2022052505/55660b3fd8b42aa6628b50d7/html5/thumbnails/25.jpg)
@ua_spring #jeeconf
Вопросы@ua_spring
SpringByExample.com.ua