SlideShare uma empresa Scribd logo
SPRING DATA JPAAPRESENTADO POR IVAN QUEIROZ
QUEM?
Bacharel em
Sistemas de
Informação
Desenvolvedor
Java
Certificação
SCJP 5
(OCJP)
Empresa de
Telecomunicações
Blog
blog.ivanqueiroz.com
2
Atualmente
Área Jurídica
AGENDA
Alguns Conceitos
Framework, IoC e DI
Java Persistence API
Enxergando o banco através de objetos
Spring Framework
Alta produtividade em aplicações
Java
Spring Data
Simplificando o acesso aos
dados
01
02
03
04
3
Spring Data JPA
Diminuindo o trabalho repetitivo05
06
07
Quando Usar
Vantagens e desvantagens
Encerrando
Um longo caminho pela frente
4
Alguns Conceitos
Framework, IoC e DI
5
FRAMEWORK CÓDIGO BIBLIOTECA
FRAMEWORK
Facilita a construção do software por deixar que o
desenvolvedor se preocupe com o que realmente
importa
6
INVERSÃO DE
CONTROLE
Ou Inversion of Control (IoC) é um padrão onde
as chamadas das ações da aplicação não são
determinados pelo desenvolvedor e o controle
é “invertido” para uma infraestrutura de
software.
Também chamado carinhosamente de “Princípio de Hollywood”
(don’t call us, we’ll call you).
7
INJEÇÃO DE
DEPENDÊNCIA
A dependência entre os módulos é controlada
por uma infraestrutura de software responsável
por “injetar” a mesma quando necessária.
@Controller
public class TarefasController {
private final JdbcTarefaDao dao;
@Autowired
public TarefasController(JdbcTarefaDao dao) {
this.dao = dao;
}
@RequestMapping(“adicionaTarefa”)
public void adiciona(Tarefa tarefa) {
dao.adiciona(tarefa);
// ...
}
}
8
JAVA PERSISTENCE API
Enxergando o banco através de objetos
9
ORM (Object
Relational
Mapper)
Técnica para relacionar
o objeto com o dado
que ele representa no
banco de dados.
Objetos
CamadadeMapeamento
ORM
Banco de
Dados
10
JPA
Especificação java
padrão (JSR-338) de
como os frameworks
ORM devem ser
comportar
@Classe Java Anotações
@Entity
@Table
@Id
Entidade
EntityManagerFactory
EntityManager
Dialeto do
Banco
Banco de
Dados
Java Persistence Query
Language
11
Exemplo
Tarefa tarefa = new Tarefa();
tarefa.setDescricao("Estudar JPA");
tarefa.setFinalizado(true);
tarefa.setDataFinalizacao(Calendar.getInstance());
EntityManagerFactory factory =
Persistence.createEntityManagerFactory("tarefas");
EntityManager manager = factory.createEntityManager();
manager.getTransaction().begin();
manager.persist(tarefa);
manager.getTransaction().commit();
System.out.println("ID da tarefa: " + tarefa.getId());
manager.close();
@Entity
public class Tarefa {
@Id
@GeneratedValue
private Long id;
@Temporal(TemporalType.DATE)
private Calendar dataFinalizacao;
}
Query query = manager
.createQuery("select t from Tarefa as t "+
"where t.finalizado = :paramFinalizado");
query.setParameter("paramFinalizado", false);
List<Tarefa> lista = query.getResultList();
12
SPRING
FRAMEWORK
Alta produtividade em aplicações
13
O QUE É ?
Framework open source em Java
criado por Rod Johnson que utiliza os
conceitos de inversão de controle e
injeção de dependência para simplificar
o desenvolvimento de aplicações
utilizando Plain Old Java Objects
(POJOs) e interfaces.
CONTAINER SPRING
No núcleo do Spring está um container que injeta (DI) e
gerencia o ciclo de vida das dependências (IoC).
CONFIGURAÇÃO FLEXÍVEL
O Spring permite que as configurações sejam por
anotações, xml, convenção ou programaticamente.
NÃO INTRUSIVO
A construção do Spring foi realizada para que a lógica
de domínio geralmente não tenha dependências do
framework.
VÁRIOS MÓDULOS DISPONÍVEIS
Além de ser compatível com o JEE o Spring possui
diversos módulos para suprir as mais diversas
necessidades.
14
COMO OBTER
INFORMAÇÕES?
No endereço spring.io/projects pode-se
encontrar de forma organizada, todas as
informaçoes necessárias para configurar e
iniciar a construção de uma aplicação
utilizando os módulos do Spring
15
SPRING DATA
Simplificando o acesso a dados
16
SPRING DATA
SPRING DATA
MONGODB
MongoRepository
MongoTemplate
SPRING DATA JPA
JpaRepository
SPRING DATA
NEO4J
GraphRepository
Neo4jTemplate
SPRING DATA
...
Embedded REST
JPA
JDBC
RDBMS
Mongo Java Driver
MongoDB Neo4J ...
SIMPLIFICAR
O projeto Spring Data tem como objetivo
simplificar as operações de acesso a
dados nas aplicações, diminuindo o
código escrito e mantendo a integração
com todo ambiente Spring já existente.
17
MODELO DE PROGRAMAÇÃO
DO SPRING DATA
02REPOSITORY
Abstração principal do
modelo Spring Data,
gerencia a classe de
domínio e define as
operações de acesso
aos dados.
03QUERY METHODS
Métodos de consulta que
possuem uma convenção de
nome o qual o Spring Data
fornece uma
implementação em tempo
de execução.
01INTERFACES
A maior parte das
implementações são
realizadas pelo Spring Data,
o desenvolvedor irá se
ocupar mais com as
definições de interfaces.
04TEMPLATES
O Spring Data fornece vários
templates (modelos) para
cuidar da alocação de
recursos e tradução de
exceções.
18
PRINCIPAIS
INTERFACES
public interface CrudRepository<T,ID extends Serializable> extends Repository {
<S extends T> S save(S entity);
T findOne(ID primaryKey);
Iterable<T> findAll();
Long count();
void delete(T entity);
boolean exists(ID primaryKey);
}
REPOSITORY
Interface central da abstração do Spring Data. É uma interface de marcação para o spring poder obter
os tipos que irá trabalhar e para ajudar o desenvolvedor a descobrir outras interfaces.
public interface Repository<T,ID extends Serializable> {}
CRUD REPOSITORY
Interface que provê os métodos para as operações de Create Read Update e Delete (CRUD). Estende
a interface Repository e assim como a interface pai ela recebe o tipo da entidade e o tipo do campo
id da entidade.
19
PRINCIPAIS
INTERFACES
PAGING AND SORTING REPOSITORY
Extendendo a CrudRepository existe a PagingAndSortingRepository que adiciona métodos para
efetuar facilmente as operações de paginação.
public interface PagingAndSortingRepository<T,ID extends Serializable> extends
CrudRepository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
20
SPRING DATA JPAJPA
Diminuindo o trabalho repetitivo
21
DAO
SIMPLES
Utilizando a abordagem tradicional do
DAO.
MODEL
public class Pessoa {
private String rg;
private String nome;
private int idade;
private String estado;
private String cidade;
//Get e Sets
}
DAO
public class DaoPessoa {
private Connection con;
private Statement comando;
public List<Pessoa> buscarTodos() {
List<Pessoa> resultados = new ArrayList<Pessoa>();
ResultSet rs;
try {
rs = comando.executeQuery("SELECT * FROM pessoa");
while (rs.next()) {
Pessoa temp = new Pessoa();
temp.setRg(rs.getString("rg"));
temp.setNome(rs.getString("nome"));
temp.setIdade(rs.getInt("idade"));
temp.setCidade(rs.getString("cidade"));
temp.setEstado(rs.getString("estado"));
resultados.add(temp);
}
return resultados;
}
...
22
REPOSITORY
JPA
Um DAO dentro do estilo de
programação do Spring (repository).
ENTITY
@Entity
public class Pessoa implements Serializable {
private static final long serialVersionUID = 1 L;
@Id private Long id;
private String nome;
@Temporal(TemporalType.DATE)
@Column(name = "dataNasc")
private Date dataNascimento;
private String email;
//Gets e Sets
}
REPOSITORY
@Repository
public class PessoaRepository {
@PersistenceContext EntityManager em;
public List <Pessoa> findAll() {
TypedQuery <Pessoa> q =
getEntityManger().createNamedQuery("SELECT p FROM
pessoa p", Pessoa.class);
return q.getResultList();
}
}
23
SPRING
DATA
JPA
Ao criar uma interface que estende a
interface JpaRepository, o próprio
Spring Data se encarrega de
implementar os métodos.
ENTITY
@Entity
public class Pessoa implements Serializable {
private static final long serialVersionUID = 1 L;
@Id
private Long id;
private String nome;
@Temporal(TemporalType.DATE)
@Column(name = "dataNasc")
private Date dataNascimento;
private String email;
//Gets e Sets
}
REPOSITORY
public interface PessoaRepository extends
JpaRepository <Pessoa, Long> {}
24
@NoRepositoryBean
interface BaseRepository<T, ID extends Serializable> extends Repository<T, ID> {
T findOne(ID id);
T save(T entity);
}
interface PessoaRepository extends BaseRepository<User, Long> {
User findByEmail(Email email);
}
REPOSITORY
CUSTOMIZADO
É possível personalizar os repositórios criando novos
métodos
25
QUERY
METHODS
São métodos de busca declarados
na interface do repositório que são
examinados e interpretados pela
infraestrutura do Spring Data para
gerar as consultas.
public interface PersonRepository extends Repository<User, Long> {
List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
}
select u from User u where u.emailAddress = ?1 and u.lastname = ?2
26
QUERY
LOOKUPS
É como o Spring Data realiza a
busca das queries. Atualmente
existem três formas.
CREATE
01
USE_DECLARED_QUERY
02
CREATE_IF_NOT_FOUND
03
<repositories query-lookup-strategy="use-declared-query"/>
27
CREATE
Quebra os query methods pelo
prefixo e o nome das propriedades
Keyword Sample JPQL snippet
And findByLastnameAndFirstname … where x.lastname = ?1 and
x.firstname = ?2
Or findByLastnameOrFirstname … where x.lastname = ?1 or
x.firstname = ?2
Is,Equals findByFirstname,findByFirstnameIs,f
indByFirstnameEquals
… where x.firstname = ?1
Between findByStartDateBetween … where x.startDate between ?1 and
?2
... ... ...
28
CREATE
Acessando propriedades
transversais
Pessoa que tem um Endereco que tem um Cep
List<Pessoa> findByEnderecoCep(Cep cep);
Definindo manualmente o ponto de transversão
List<Pessoa> findByEndereco_Cep(Cep cep);
29
XML CLASSE JAVA
<named-query name="User.findByLastname">
<query>select u from User u where u.lastname =
?1</query>
</named-query>
@Entity
@NamedQuery(name = "User.findByEmailAddress",
query = "select u from User u where u.emailAddress = ?1")
public class User {
}
REPOSITORY
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByLastname(String lastname);
User findByEmailAddress(String emailAddress);
}
USE_DECLARED_QUERY
Utiliza apenas queries declaradas
30
USE_DECLARED_QUERY
Utiliza apenas queries declaradas
@Query - Anotação
@Modifying
@Query("update User u set u.firstname = ?1 where u.lastname = ?2")
int setFixedFirstnameFor(String firstname, String lastname);
@Query("select u from User u where u.firstname like %?1")
List<User> findByFirstnameEndsWith(String firstname);
@Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?1", nativeQuery = true)
User findByEmailAddress(String emailAddress);
@Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",countQuery = "SELECT count(*) FROM USERS
WHERE LASTNAME = ?1",nativeQuery = true)
Page<User> findByLastname(String lastname, Pageable pageable);
@Query("select u from User u where u.firstname = :firstname or u.lastname = :lastname")
User findByLastnameOrFirstname(@Param("lastname") String lastname,Param("firstname") String
firstname);
31
LIMITANDO
RESULTADOS
User findFirstByOrderByLastnameAsc();
User findTopByOrderByAgeDesc();
Page<User> queryFirst10ByLastname(String lastname, Pageable
pageable);
Slice<User> findTop3ByLastname(String lastname, Pageable pageable);
List<User> findFirst10ByLastname(String lastname, Sort sort);
List<User> findTop10ByLastname(String lastname, Pageable pageable);
32
QUANDO USAR
Vantagens e desvantagens
33
VANTAGENS
Suporte a paginação, execução dinâmica
de consultas e possibilidade de utilizar
código customizado para acessar a base de
dados.
Sofisticado suporte para criação de
repositórios que diminui muito código
repetitivo.
As consultas JPQL são compiladas na
inicialização do contexto Spring, facilitando
a detecção de erros de sintaxe.
Suporte a QueryDSL e auditoria de classes
de domínio.
34
DESVANTAGENS
Nomes dos métodos dos repositórios
podem se tornar grandes em longas ou
complicadas consultas.
SQL nativo pode ser mais eficiente.
35
ENCERRANDO
Um longo caminho pela frente
36
FONTES
SITES
● InfoQ - https://www.infoq.com/br/articles/spring-data-intro
Artigo - Spring Data: A solução mais geral para persistência?
Acessado em 09/2016
● Spring Data JPA reference -
http://docs.spring.io/spring-data/jpa/docs/1.10.3.RELEASE/reference/html/
Acessado em 09/2016
● Spring Framework reference -
http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle
/
Acessado em 09/2016
● Uma introdução prática ao JPA com Hibernate -
https://www.caelum.com.br/apostila-java-web/uma-introducao-pratica-ao-jpa-co
m-hibernate/
Acessado em 09/2016
37
DÚVIDAS?
38
OBRIGADO!
ivanqueiroz@gmail.com
@ivanqueiroz
@javabahia

Mais conteúdo relacionado

Mais procurados

Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018André Luiz Forchesatto
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API07.pallav
 
Spring Framework
Spring Framework  Spring Framework
Spring Framework tola99
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootJosué Neis
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot IntroductionJeevesh Pandey
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introductionRasheed Waraich
 
Spring Framework - MVC
Spring Framework - MVCSpring Framework - MVC
Spring Framework - MVCDzmitry Naskou
 
Spring boot
Spring bootSpring boot
Spring bootsdeeg
 
Java Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By StepJava Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By StepGuo Albert
 
Spring framework Controllers and Annotations
Spring framework   Controllers and AnnotationsSpring framework   Controllers and Annotations
Spring framework Controllers and AnnotationsAnuj Singh Rajput
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les basesAntoine Rey
 
Spring Framework
Spring FrameworkSpring Framework
Spring Frameworknomykk
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring FrameworkHùng Nguyễn Huy
 
Spring annotations notes
Spring annotations notesSpring annotations notes
Spring annotations notesVipul Singh
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!Jakub Kubrynski
 
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of ControlJava Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of ControlArjun Thakur
 

Mais procurados (20)

Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
 
Spring annotation
Spring annotationSpring annotation
Spring annotation
 
Spring Framework
Spring Framework  Spring Framework
Spring Framework
 
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
 
Spring boot
Spring bootSpring boot
Spring boot
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot Introduction
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introduction
 
Spring Framework - MVC
Spring Framework - MVCSpring Framework - MVC
Spring Framework - MVC
 
Spring boot
Spring bootSpring boot
Spring boot
 
Java Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By StepJava Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By Step
 
Spring framework Controllers and Annotations
Spring framework   Controllers and AnnotationsSpring framework   Controllers and Annotations
Spring framework Controllers and Annotations
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les bases
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Spring annotations notes
Spring annotations notesSpring annotations notes
Spring annotations notes
 
Spring jdbc
Spring jdbcSpring jdbc
Spring jdbc
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
 
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of ControlJava Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
 

Destaque

Java User Group - O que é e como eu faço para participar?
Java User Group - O que é e como eu faço para participar?Java User Group - O que é e como eu faço para participar?
Java User Group - O que é e como eu faço para participar?jeffersonmoreirati
 
Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Rafael Ponte
 
JDBC - JPA - Spring Data
JDBC - JPA - Spring DataJDBC - JPA - Spring Data
JDBC - JPA - Spring DataArturs Drozdovs
 
Easy data-with-spring-data-jpa
Easy data-with-spring-data-jpaEasy data-with-spring-data-jpa
Easy data-with-spring-data-jpaStaples
 
NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?Nico Steppat
 
Usando Python na Google App Engine
Usando Python na Google App EngineUsando Python na Google App Engine
Usando Python na Google App EngineLuiz Cláudio Silva
 
Gaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da Google
Gaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da GoogleGaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da Google
Gaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da GoogleSerge Rehem
 
Lazy vs. Eager Loading Strategies in JPA 2.1
Lazy vs. Eager Loading Strategies in JPA 2.1Lazy vs. Eager Loading Strategies in JPA 2.1
Lazy vs. Eager Loading Strategies in JPA 2.1Patrycja Wegrzynowicz
 
Spring Data - Intro (Odessa Java TechTalks)
Spring Data - Intro (Odessa Java TechTalks)Spring Data - Intro (Odessa Java TechTalks)
Spring Data - Intro (Odessa Java TechTalks)Igor Anishchenko
 
Coding Dojo em 5 Minutos
Coding Dojo em 5 MinutosCoding Dojo em 5 Minutos
Coding Dojo em 5 MinutosSerge Rehem
 

Destaque (20)

Spring Data Jpa
Spring Data JpaSpring Data Jpa
Spring Data Jpa
 
Java User Group - O que é e como eu faço para participar?
Java User Group - O que é e como eu faço para participar?Java User Group - O que é e como eu faço para participar?
Java User Group - O que é e como eu faço para participar?
 
Jpa de a à z por que conhecer jpa
Jpa de a à z  por que conhecer jpa Jpa de a à z  por que conhecer jpa
Jpa de a à z por que conhecer jpa
 
Palestra Carreira Java Bahia Meeting
Palestra Carreira Java Bahia MeetingPalestra Carreira Java Bahia Meeting
Palestra Carreira Java Bahia Meeting
 
Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)
 
JDBC - JPA - Spring Data
JDBC - JPA - Spring DataJDBC - JPA - Spring Data
JDBC - JPA - Spring Data
 
Spring Data JPA
Spring Data JPASpring Data JPA
Spring Data JPA
 
Easy data-with-spring-data-jpa
Easy data-with-spring-data-jpaEasy data-with-spring-data-jpa
Easy data-with-spring-data-jpa
 
NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?
 
Spring Data in 10 minutes
Spring Data in 10 minutesSpring Data in 10 minutes
Spring Data in 10 minutes
 
Tdd principios oo
Tdd principios oo Tdd principios oo
Tdd principios oo
 
Google Maps API V3
Google Maps API V3Google Maps API V3
Google Maps API V3
 
Usando Python na Google App Engine
Usando Python na Google App EngineUsando Python na Google App Engine
Usando Python na Google App Engine
 
Gaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da Google
Gaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da GoogleGaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da Google
Gaelyk: Desenvolvimento Ágil em Groovy nas Nuvens da Google
 
Thinking Beyond ORM in JPA
Thinking Beyond ORM in JPAThinking Beyond ORM in JPA
Thinking Beyond ORM in JPA
 
Lazy vs. Eager Loading Strategies in JPA 2.1
Lazy vs. Eager Loading Strategies in JPA 2.1Lazy vs. Eager Loading Strategies in JPA 2.1
Lazy vs. Eager Loading Strategies in JPA 2.1
 
Hibernate using jpa
Hibernate using jpaHibernate using jpa
Hibernate using jpa
 
Colloquium Report
Colloquium ReportColloquium Report
Colloquium Report
 
Spring Data - Intro (Odessa Java TechTalks)
Spring Data - Intro (Odessa Java TechTalks)Spring Data - Intro (Odessa Java TechTalks)
Spring Data - Intro (Odessa Java TechTalks)
 
Coding Dojo em 5 Minutos
Coding Dojo em 5 MinutosCoding Dojo em 5 Minutos
Coding Dojo em 5 Minutos
 

Semelhante a Spring Data Jpa

TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?Rafael Benevides
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
Odi tutorial configuração repositórios mestre e trabalho
Odi tutorial   configuração repositórios mestre e trabalhoOdi tutorial   configuração repositórios mestre e trabalho
Odi tutorial configuração repositórios mestre e trabalhoCaio Lima
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingEder Magalhães
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com PythonLuiz Aldabalde
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com PythonPythOnRio
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5Diego Pacheco
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...Tchelinux
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e DependênciasWende Mendes
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireportfpsgyn
 
Implementando APIs REST mais seguras - TDC 2019 - Porto Alegre
Implementando APIs REST mais seguras - TDC 2019 - Porto AlegreImplementando APIs REST mais seguras - TDC 2019 - Porto Alegre
Implementando APIs REST mais seguras - TDC 2019 - Porto AlegreRenato Groff
 
Apostila: Curso de java III
Apostila: Curso de java IIIApostila: Curso de java III
Apostila: Curso de java IIIVerônica Veiga
 
Entity Framework 4
Entity Framework 4Entity Framework 4
Entity Framework 4CDS
 

Semelhante a Spring Data Jpa (20)

Spring Data Neo4j
Spring Data Neo4jSpring Data Neo4j
Spring Data Neo4j
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Palestra
PalestraPalestra
Palestra
 
Odi tutorial configuração repositórios mestre e trabalho
Odi tutorial   configuração repositórios mestre e trabalhoOdi tutorial   configuração repositórios mestre e trabalho
Odi tutorial configuração repositórios mestre e trabalho
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com Python
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com Python
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Web Sphere
Web SphereWeb Sphere
Web Sphere
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
 
Aula1
Aula1Aula1
Aula1
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e Dependências
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireport
 
Implementando APIs REST mais seguras - TDC 2019 - Porto Alegre
Implementando APIs REST mais seguras - TDC 2019 - Porto AlegreImplementando APIs REST mais seguras - TDC 2019 - Porto Alegre
Implementando APIs REST mais seguras - TDC 2019 - Porto Alegre
 
Apostila: Curso de java III
Apostila: Curso de java IIIApostila: Curso de java III
Apostila: Curso de java III
 
Entity Framework 4
Entity Framework 4Entity Framework 4
Entity Framework 4
 
API Apontador
API ApontadorAPI Apontador
API Apontador
 

Spring Data Jpa

  • 1. SPRING DATA JPAAPRESENTADO POR IVAN QUEIROZ
  • 2. QUEM? Bacharel em Sistemas de Informação Desenvolvedor Java Certificação SCJP 5 (OCJP) Empresa de Telecomunicações Blog blog.ivanqueiroz.com 2 Atualmente Área Jurídica
  • 3. AGENDA Alguns Conceitos Framework, IoC e DI Java Persistence API Enxergando o banco através de objetos Spring Framework Alta produtividade em aplicações Java Spring Data Simplificando o acesso aos dados 01 02 03 04 3 Spring Data JPA Diminuindo o trabalho repetitivo05 06 07 Quando Usar Vantagens e desvantagens Encerrando Um longo caminho pela frente
  • 5. 5 FRAMEWORK CÓDIGO BIBLIOTECA FRAMEWORK Facilita a construção do software por deixar que o desenvolvedor se preocupe com o que realmente importa
  • 6. 6 INVERSÃO DE CONTROLE Ou Inversion of Control (IoC) é um padrão onde as chamadas das ações da aplicação não são determinados pelo desenvolvedor e o controle é “invertido” para uma infraestrutura de software. Também chamado carinhosamente de “Princípio de Hollywood” (don’t call us, we’ll call you).
  • 7. 7 INJEÇÃO DE DEPENDÊNCIA A dependência entre os módulos é controlada por uma infraestrutura de software responsável por “injetar” a mesma quando necessária. @Controller public class TarefasController { private final JdbcTarefaDao dao; @Autowired public TarefasController(JdbcTarefaDao dao) { this.dao = dao; } @RequestMapping(“adicionaTarefa”) public void adiciona(Tarefa tarefa) { dao.adiciona(tarefa); // ... } }
  • 8. 8 JAVA PERSISTENCE API Enxergando o banco através de objetos
  • 9. 9 ORM (Object Relational Mapper) Técnica para relacionar o objeto com o dado que ele representa no banco de dados. Objetos CamadadeMapeamento ORM Banco de Dados
  • 10. 10 JPA Especificação java padrão (JSR-338) de como os frameworks ORM devem ser comportar @Classe Java Anotações @Entity @Table @Id Entidade EntityManagerFactory EntityManager Dialeto do Banco Banco de Dados Java Persistence Query Language
  • 11. 11 Exemplo Tarefa tarefa = new Tarefa(); tarefa.setDescricao("Estudar JPA"); tarefa.setFinalizado(true); tarefa.setDataFinalizacao(Calendar.getInstance()); EntityManagerFactory factory = Persistence.createEntityManagerFactory("tarefas"); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin(); manager.persist(tarefa); manager.getTransaction().commit(); System.out.println("ID da tarefa: " + tarefa.getId()); manager.close(); @Entity public class Tarefa { @Id @GeneratedValue private Long id; @Temporal(TemporalType.DATE) private Calendar dataFinalizacao; } Query query = manager .createQuery("select t from Tarefa as t "+ "where t.finalizado = :paramFinalizado"); query.setParameter("paramFinalizado", false); List<Tarefa> lista = query.getResultList();
  • 13. 13 O QUE É ? Framework open source em Java criado por Rod Johnson que utiliza os conceitos de inversão de controle e injeção de dependência para simplificar o desenvolvimento de aplicações utilizando Plain Old Java Objects (POJOs) e interfaces. CONTAINER SPRING No núcleo do Spring está um container que injeta (DI) e gerencia o ciclo de vida das dependências (IoC). CONFIGURAÇÃO FLEXÍVEL O Spring permite que as configurações sejam por anotações, xml, convenção ou programaticamente. NÃO INTRUSIVO A construção do Spring foi realizada para que a lógica de domínio geralmente não tenha dependências do framework. VÁRIOS MÓDULOS DISPONÍVEIS Além de ser compatível com o JEE o Spring possui diversos módulos para suprir as mais diversas necessidades.
  • 14. 14 COMO OBTER INFORMAÇÕES? No endereço spring.io/projects pode-se encontrar de forma organizada, todas as informaçoes necessárias para configurar e iniciar a construção de uma aplicação utilizando os módulos do Spring
  • 16. 16 SPRING DATA SPRING DATA MONGODB MongoRepository MongoTemplate SPRING DATA JPA JpaRepository SPRING DATA NEO4J GraphRepository Neo4jTemplate SPRING DATA ... Embedded REST JPA JDBC RDBMS Mongo Java Driver MongoDB Neo4J ... SIMPLIFICAR O projeto Spring Data tem como objetivo simplificar as operações de acesso a dados nas aplicações, diminuindo o código escrito e mantendo a integração com todo ambiente Spring já existente.
  • 17. 17 MODELO DE PROGRAMAÇÃO DO SPRING DATA 02REPOSITORY Abstração principal do modelo Spring Data, gerencia a classe de domínio e define as operações de acesso aos dados. 03QUERY METHODS Métodos de consulta que possuem uma convenção de nome o qual o Spring Data fornece uma implementação em tempo de execução. 01INTERFACES A maior parte das implementações são realizadas pelo Spring Data, o desenvolvedor irá se ocupar mais com as definições de interfaces. 04TEMPLATES O Spring Data fornece vários templates (modelos) para cuidar da alocação de recursos e tradução de exceções.
  • 18. 18 PRINCIPAIS INTERFACES public interface CrudRepository<T,ID extends Serializable> extends Repository { <S extends T> S save(S entity); T findOne(ID primaryKey); Iterable<T> findAll(); Long count(); void delete(T entity); boolean exists(ID primaryKey); } REPOSITORY Interface central da abstração do Spring Data. É uma interface de marcação para o spring poder obter os tipos que irá trabalhar e para ajudar o desenvolvedor a descobrir outras interfaces. public interface Repository<T,ID extends Serializable> {} CRUD REPOSITORY Interface que provê os métodos para as operações de Create Read Update e Delete (CRUD). Estende a interface Repository e assim como a interface pai ela recebe o tipo da entidade e o tipo do campo id da entidade.
  • 19. 19 PRINCIPAIS INTERFACES PAGING AND SORTING REPOSITORY Extendendo a CrudRepository existe a PagingAndSortingRepository que adiciona métodos para efetuar facilmente as operações de paginação. public interface PagingAndSortingRepository<T,ID extends Serializable> extends CrudRepository<T, ID> { Iterable<T> findAll(Sort sort); Page<T> findAll(Pageable pageable); }
  • 20. 20 SPRING DATA JPAJPA Diminuindo o trabalho repetitivo
  • 21. 21 DAO SIMPLES Utilizando a abordagem tradicional do DAO. MODEL public class Pessoa { private String rg; private String nome; private int idade; private String estado; private String cidade; //Get e Sets } DAO public class DaoPessoa { private Connection con; private Statement comando; public List<Pessoa> buscarTodos() { List<Pessoa> resultados = new ArrayList<Pessoa>(); ResultSet rs; try { rs = comando.executeQuery("SELECT * FROM pessoa"); while (rs.next()) { Pessoa temp = new Pessoa(); temp.setRg(rs.getString("rg")); temp.setNome(rs.getString("nome")); temp.setIdade(rs.getInt("idade")); temp.setCidade(rs.getString("cidade")); temp.setEstado(rs.getString("estado")); resultados.add(temp); } return resultados; } ...
  • 22. 22 REPOSITORY JPA Um DAO dentro do estilo de programação do Spring (repository). ENTITY @Entity public class Pessoa implements Serializable { private static final long serialVersionUID = 1 L; @Id private Long id; private String nome; @Temporal(TemporalType.DATE) @Column(name = "dataNasc") private Date dataNascimento; private String email; //Gets e Sets } REPOSITORY @Repository public class PessoaRepository { @PersistenceContext EntityManager em; public List <Pessoa> findAll() { TypedQuery <Pessoa> q = getEntityManger().createNamedQuery("SELECT p FROM pessoa p", Pessoa.class); return q.getResultList(); } }
  • 23. 23 SPRING DATA JPA Ao criar uma interface que estende a interface JpaRepository, o próprio Spring Data se encarrega de implementar os métodos. ENTITY @Entity public class Pessoa implements Serializable { private static final long serialVersionUID = 1 L; @Id private Long id; private String nome; @Temporal(TemporalType.DATE) @Column(name = "dataNasc") private Date dataNascimento; private String email; //Gets e Sets } REPOSITORY public interface PessoaRepository extends JpaRepository <Pessoa, Long> {}
  • 24. 24 @NoRepositoryBean interface BaseRepository<T, ID extends Serializable> extends Repository<T, ID> { T findOne(ID id); T save(T entity); } interface PessoaRepository extends BaseRepository<User, Long> { User findByEmail(Email email); } REPOSITORY CUSTOMIZADO É possível personalizar os repositórios criando novos métodos
  • 25. 25 QUERY METHODS São métodos de busca declarados na interface do repositório que são examinados e interpretados pela infraestrutura do Spring Data para gerar as consultas. public interface PersonRepository extends Repository<User, Long> { List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname); } select u from User u where u.emailAddress = ?1 and u.lastname = ?2
  • 26. 26 QUERY LOOKUPS É como o Spring Data realiza a busca das queries. Atualmente existem três formas. CREATE 01 USE_DECLARED_QUERY 02 CREATE_IF_NOT_FOUND 03 <repositories query-lookup-strategy="use-declared-query"/>
  • 27. 27 CREATE Quebra os query methods pelo prefixo e o nome das propriedades Keyword Sample JPQL snippet And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2 Or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2 Is,Equals findByFirstname,findByFirstnameIs,f indByFirstnameEquals … where x.firstname = ?1 Between findByStartDateBetween … where x.startDate between ?1 and ?2 ... ... ...
  • 28. 28 CREATE Acessando propriedades transversais Pessoa que tem um Endereco que tem um Cep List<Pessoa> findByEnderecoCep(Cep cep); Definindo manualmente o ponto de transversão List<Pessoa> findByEndereco_Cep(Cep cep);
  • 29. 29 XML CLASSE JAVA <named-query name="User.findByLastname"> <query>select u from User u where u.lastname = ?1</query> </named-query> @Entity @NamedQuery(name = "User.findByEmailAddress", query = "select u from User u where u.emailAddress = ?1") public class User { } REPOSITORY public interface UserRepository extends JpaRepository<User, Long> { List<User> findByLastname(String lastname); User findByEmailAddress(String emailAddress); } USE_DECLARED_QUERY Utiliza apenas queries declaradas
  • 30. 30 USE_DECLARED_QUERY Utiliza apenas queries declaradas @Query - Anotação @Modifying @Query("update User u set u.firstname = ?1 where u.lastname = ?2") int setFixedFirstnameFor(String firstname, String lastname); @Query("select u from User u where u.firstname like %?1") List<User> findByFirstnameEndsWith(String firstname); @Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?1", nativeQuery = true) User findByEmailAddress(String emailAddress); @Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",nativeQuery = true) Page<User> findByLastname(String lastname, Pageable pageable); @Query("select u from User u where u.firstname = :firstname or u.lastname = :lastname") User findByLastnameOrFirstname(@Param("lastname") String lastname,Param("firstname") String firstname);
  • 31. 31 LIMITANDO RESULTADOS User findFirstByOrderByLastnameAsc(); User findTopByOrderByAgeDesc(); Page<User> queryFirst10ByLastname(String lastname, Pageable pageable); Slice<User> findTop3ByLastname(String lastname, Pageable pageable); List<User> findFirst10ByLastname(String lastname, Sort sort); List<User> findTop10ByLastname(String lastname, Pageable pageable);
  • 33. 33 VANTAGENS Suporte a paginação, execução dinâmica de consultas e possibilidade de utilizar código customizado para acessar a base de dados. Sofisticado suporte para criação de repositórios que diminui muito código repetitivo. As consultas JPQL são compiladas na inicialização do contexto Spring, facilitando a detecção de erros de sintaxe. Suporte a QueryDSL e auditoria de classes de domínio.
  • 34. 34 DESVANTAGENS Nomes dos métodos dos repositórios podem se tornar grandes em longas ou complicadas consultas. SQL nativo pode ser mais eficiente.
  • 36. 36 FONTES SITES ● InfoQ - https://www.infoq.com/br/articles/spring-data-intro Artigo - Spring Data: A solução mais geral para persistência? Acessado em 09/2016 ● Spring Data JPA reference - http://docs.spring.io/spring-data/jpa/docs/1.10.3.RELEASE/reference/html/ Acessado em 09/2016 ● Spring Framework reference - http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle / Acessado em 09/2016 ● Uma introdução prática ao JPA com Hibernate - https://www.caelum.com.br/apostila-java-web/uma-introducao-pratica-ao-jpa-co m-hibernate/ Acessado em 09/2016