fagnerlima.pro.br
Fagner Lima
Especializando em Desenvolvimento de Aplicações para Web
Tecnólogo em Análise de Sistemas
fagnerlima.pro.br
Spring Specification Tools
Simplificando consultas dinâmicas no
Spring Data JPA
https://www.linkedin.com/in/fagnerlima
https://github.com/fagnerlima
Quem sou eu?
28 anos
+9 anos de XP
Especializando em Desenvolvimento de Aplicações para
Web
Tecnólogo em Análise e Desenvolvimento de Sistemas
Spring Specification Tools
26/08/2020 Pág. 2
Quem sou eu?
Web Designer
Tutor do curso Fullstack Angular e Spring
Analista Desenvolvedor Pleno
Programador Pleno
Professor Técnico de Informática
Spring Specification Tools
26/08/2020 Pág. 3
Quem sou eu?
Spring Specification Tools
26/08/2020 Pág. 4
Spring Specification Tools
26/08/2020 Pág. 5
Produtividade
Repository
Query
Methods
@Query e
JPQL
Pageable
Spring Data JPA - Query Methods
Spring Specification Tools
26/08/2020 Pág. 6
(Spring Data JPA - Reference Documentation, 2020)
Spring Data JPA - Query Methods
Spring Specification Tools
26/08/2020 Pág. 7
(Spring Data JPA - Reference Documentation, 2020)
Spring Data JPA - @Query
Spring Specification Tools
26/08/2020 Pág. 8
(Spring Data JPA - Reference Documentation, 2020)
Problemas
Selecionar um subconjunto de objetos com base em alguns
critérios.
Verificar se apenas objetos adequados serão usados para
uma determinada função.
Descrever o que um objeto pode fazer, sem explicar os
detalhes de como o objeto faz.
Spring Specification Tools
26/08/2020 Pág. 9
(EVANS, FOWLER, 1997)
Solução
Spring Specification Tools
26/08/2020 Pág. 10
A Specification tem um método
isSatisfiedBy(anObject): Boolean que retorna “true”
se todos os critérios são atendidos por anObject.
Crie uma Specification que seja capaz de saber se
um objeto corresponde a alguns critérios.
(EVANS, FOWLER, 1997)
Spring Specification Tools
26/08/2020 Pág. 11
Specification
Design
Pattern
JPA
Criteria
API
Encadeamento
das regras de
negócio
Queries
dinâmicas
Domain
Driven
Design
Specification – Como implementar?
Hard Coded
Specification
(+) Fácil
(+) Expressivo
(-) Inflexível
Parameterized
Specification
(+) Mais flexível
(-) Ainda requer
classes para fins
específico
Composite
Specification
(+) Muito flexível, não
requer muitas classes
especializadas
(+) Suporte a
operações lógicas
(-) Investimento em
framework complexo
Spring Specification Tools
26/08/2020 Pág. 12
(EVANS, FOWLER,1997)
Spring
Specification
Tools
DTOs
Factory
Builder
Annotations
Spring Specification Tools
26/08/2020 Pág. 13
Spring Specification Tools
<dependency>
<groupId>com.github.fagnerlima</groupId>
<artifactId>spring-specification-tools</artifactId>
<version>0.3.1</version>
</dependency>
https://github.com/fagnerlima/spring-specification-tools
Sample Project: https://github.com/fagnerlima/sample-specification-api
Spring Specification Tools
26/08/2020 Pág. 14
Spring Specification Tools
Spring Specification Tools
26/08/2020 Pág. 15
Spring Specification Tools
Spring Specification Tools
26/08/2020 Pág. 16
Spring Specification Tools
Spring Specification Tools
26/08/2020 Pág. 17
Spring Specification Tools
Spring Specification Tools
26/08/2020 Pág. 18
Spring Specification Tools
Spring Specification Tools
26/08/2020 Pág. 19
Spring Specification Tools
Spring Specification Tools
26/08/2020 Pág. 20
fagnerlima.pro.brfagnerlima.pro.br
Fagner Lima
Especializando em Desenvolvimento de Aplicações para Web
Tecnólogo em Análise de Sistemas
Spring Specification Tools
26/08/2020 Pág. 21
Spring Specification Tools
Simplificando consultas dinâmicas no
Spring Data JPA
https://www.linkedin.com/in/fagnerlima
https://github.com/fagnerlima
Referências
• https://github.com/fagnerlima/spring-specification-tools
• https://github.com/fagnerlima/sample-specification-api
• https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference
• https://www.martinfowler.com/apsupp/spec.pdf
Spring Specification Tools
26/08/2020 Pág. 22

Spring Specification Tools - Simplificando consultas dinâmicas no Spring Data JPA