Iniciando com Spring Data JPA \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 17 Horas 

 19 Min 

 28 Seg 

   Tempo restante da oferta: 17 19 28 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Iniciando com Spring Data JPA  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

# Iniciando com Spring Data JPA

 Neste artigo iremos conhecer o Spring Data JPA, entender o seu funcionamento e como o mesmo pode nos auxiliar na camada de persistência.

 [ Cleyson Lima ](https://www.treinaweb.com.br/blog/autor/cleyson-lima) 5 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/01/iniciando-com-spring-data-jpa.png)  

Em outro artigo nós vimos o que é o [Spring Data](https://www.treinaweb.com.br/blog/conhecendo-o-projeto-spring-data/) e entendemos que o mesmo é um conjunto de frameworks com o objetivo de facilitar o processo de persistência de dados em aplicações Spring. Agora nós iremos falar de um dos seus subprojetos, o Spring Data JPA.

## O que é o Spring Data JPA?

[  ![Spring Framework - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/spring-boot.svg)   Curso Spring Framework - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/spring-framework-fundamentos)

O Spring Data JPA é uma framework que faz parte do conjunto de projetos do Spring Data que tem como finalidade tornar a integração de aplicações Spring com a JPA (Java Persistence API), uma de suas principais vantagens é a capacidade que o mesmo possui para criar a camada de acesso aos dados sem a necessidade de termos que implementar manualmente as famosas classes de DAO (Data Access Object).

Assim como o projeto Spring Data possui interfaces que são utilizadas ao longo de todos os seus subprojetos, o Spring Data JPA também possui sua principal interface que geralmente iremos utilizar durante a criação da camada de persistência da nossa aplicação, essa interface é a [JpaRepository](https://github.com/spring-projects/spring-data-jpa/blob/main/src/main/java/org/springframework/data/jpa/repository/JpaRepository.java).

Veja no diagrama abaixo quais os métodos definidos pela interface `JpaRepository` e como ela se relaciona com as interfaces do Spring Data:

![Diagrama de classes com as interfaces disponíveis no projeto Spring Data JPA](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/01/spring-data-jpa-interfaces.png)

## Adição e configuração do Spring Data JPA

[  ![Spring Framework - Spring Data JPA](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/spring-boot.svg)   Curso Spring Framework - Spring Data JPA Conhecer o curso ](https://www.treinaweb.com.br/curso/spring-framewok-spring-data-jpa)

Agora que já entendemos o seu objetivo, veremos como podemos adiciona-lo e configura-lo em um projeto com o [Spring Boot](https://www.treinaweb.com.br/blog/o-que-e-o-spring-boot).

Assim como a esmagadora maioria dos projetos que compõem o ecossistema Spring temos em mãos um starter para adição do Spring Data JPA, então para que possamos adiciona-lo em um projeto Spring Boot basta que coloquemos o seu starter como dependência do projeto.

```xml

  org.springframework.boot
  spring-boot-starter-data-jpa

  mysql
  mysql-connector-java
  runtime

```

Lembrando que não precisamos informar a versão dos starters oficiais do Spring Boot uma vez que o próprio Spring Boot define as versões a serem utilizadas. Outro ponto importante é a inclusão do driver de conexão com o banco de dados, neste exemplo estou utilizando o MySQL.

Com esse simples passo já teremos o Spring Data JPA disponível para uso em nosso projeto, porém também é necessário realizar a configuração de conexão com o banco de dados, uma vez que o mesmo não tem com adivinhar qual banco de dados estamos utilizando, onde o mesmo está localizado e quais as suas credenciais de acesso.

É possível realizar essa configuração de duas principais formas, a partir do arquivo de configuração do nosso projeto Spring Boot ou através de uma classe Java de configuração. Por motivos de simplicidade vamos realizar a configuração através do arquivo de configuração do projeto que é o `application.properties` que fica localizado no diretório `src/main/resources`.

```
# Configuração do DataSource
spring.datasource.url=jdbc:mysql://localhost:3306/conhecendo_spring_data_jpa
spring.datasource.username=root
spring.datasource.password=root

# Configuração do Hibernate
spring.jpa.hibernate.ddl-auto=update

# Configuração da JPA
spring.jpa.show-sql=true

```

Com isso nós estamos configurando três componentes do nosso projeto, o primeiro deles é o `DataSource` que possui as informações de conexão com o nosso banco de dados, através da chave `spring.datasource.url` nós configuramos qual a string de conexão no padrão JDBC (Java Database Connectivity) a ser utilizada, além disso também configuramos qual o usuário e senha de nosso banco de dados através das chaves `spring.datasource.username` e `spring.datasource.password` respectivamente.

O segundo componente configurado foi o Hibernate, aqui vai um ponto importante, o Spring Data JPA não é um JPA provider, logo, é necessário que tenhamos um JPA provider em nosso sistema, por padrão é utilizado o Hibernate para realizar este trabalho. Neste ponto estamos apenas configurando o `ddl-auto` através da chave de configuração `spring.jpa.hibernate.ddl-auto`.

E por fim o ultimo componente configurado foi a própria JPA, a única configuração da JPA que fizemos foi colocar como `true` a chave de configuração `spring.jpa.show-sql`, isso faz com que as queries SQL geradas pela nossa JPA provider sejam exibidas no console.

## Os repositórios do Spring Data JPA

[  ![Kanban - Usando com Scrum](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/kanban.svg)   Curso Kanban - Usando com Scrum Conhecer o curso ](https://www.treinaweb.com.br/curso/kanban-usando-com-scrum)

Agora que sabemos o que é e como fazer adição do Spring Data JPA em nosso projeto vamos ver como de fato utilizar uma de suas principais funcionalidades, os repositórios.

Todos os projetos do Spring Data seguem um padrão de projeto chamado `Repository`, esse repository ou repositório conterá todo código necessário para que possamos realizar o acesso ao banco de dados, ou seja, um repositório tem a mesma funcionalidade de uma classe DAO, porém, a vantagem é que o Spring Data JPA irá gerar esse repositório de forma automática.

Então vamos ao código, inicialmente irei criar uma entidade da JPA, lembrando que uma entidade nada mais é que uma classe que segue o padrão Java Bean que irá representar uma tabela no banco de dados, essa entidade eu irei chamar de `Cliente`.

```java
package br.com.treinaweb.conhecendospringdatajpa.entity;

import java.time.LocalDate;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Cliente {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, length = 100)
    private String nome;

    @Column(nullable = false, unique = true)
    private String email;

    @Column(nullable = false)
    private LocalDate dataNascimento;

    public Cliente() {}

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public LocalDate getDataNascimento() {
        return dataNascimento;
    }

    public void setDataNascimento(LocalDate dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Cliente other = (Cliente) obj;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "Cliente [id=" + id + ", nome=" + nome + "]";
    }

}

```

No código acima temos a nossa entidade `Cliente`, a mesma possui os atributos `id` do tipo `Long`, `nome` do tipo `String`, `email` do tipo `String` e `dataNascimento` do tipo `LocalDate`. Logo o Hibernate irá gerar uma tabela em nosso banco de dados com o mesmo nome da nossa classe contendo como coluna os atributos que foram definidos.

Agora que já temos a nossa entidade podemos então criar o nosso repositório que irá conter todos os métodos que irão nos permitir manipular os dados no nosso banco de dados. Para isso irei criar uma interface chamada `ClienteRepository` e essa interface irá estender a interface `JpaRepository` do Spring Data JPA.

```java
package br.com.treinaweb.conhecendospringdatajpa.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import br.com.treinaweb.conhecendospringdatajpa.entity.Cliente;

public interface ClienteRepository extends JpaRepository {

}

```

Veja que a nossa interface estende da interface principal do Spring Data JPA e nesse momento nós informamos os tipos genéricos `T` e `ID`, sendo que o tipo genérico `T` representa qual o tipo da nossa entidade, no caso a classe `Cliente` e o tipo genérico `ID` representa qual o tipo do id da nossa entidade, que no caso é do tipo `Long`.

Com isso nós já temos um repositório pronto para uso, mas nesse momento você pode estar se perguntando “A única coisa que criamos foi uma interface, não teríamos que também criar a implementação dessa interface para poder de fato utiliza-la?” e a resposta é não, não é preciso que façamos a implementação da interface, isso porque o próprio Spring Data JPA irá gerar uma classe que implementa a nossa interface assim que fizermos a injeção de dependências dessa interface em algum lugar do nosso projeto.

## Conclusão

Nesse artigo vimos o que é o Spring Data JPA e como o mesmo pode nos auxiliar no uso da JPA em conjunto com Hibernate dentre de aplicações Spring, com isso já temos o conhecimento teórico necessário para entender como utilizar essa incrível framework dentro de nossos projetos.

Em um futuro artigo falarei um pouco mais como podemos utilizar os métodos de CRUD disponibilizados pelo Spring Data JPA na prática durante o desenvolvimento de uma API com o Spring Web MVC. Mas até lá você pode ler o artigo [Criando uma API REST com o Spring Boot](https://www.treinaweb.com.br/blog/criando-uma-api-rest-com-o-spring-boot) para ter uma introdução mais direto ao ponto de como o Spring Data JPA pode ser utilizado.

- [ #JPA ](https://www.treinaweb.com.br/blog/tag/jpa)
- [ #Hibernate ](https://www.treinaweb.com.br/blog/tag/hibernate)
- [ #Spring ](https://www.treinaweb.com.br/blog/tag/spring)
- [ #Spring Boot ](https://www.treinaweb.com.br/blog/tag/spring-boot)
- [ #spring data jpa ](https://www.treinaweb.com.br/blog/tag/spring-data-jpa)

Autor

 ![Cleyson Lima](//secure.gravatar.com/avatar/db30efb102ffa5d5204cebe12060b111?d=mm)

## Cleyson Lima

 Professor, programador, fã de One Piece e finge saber cozinhar. Cleyson é graduando em Licenciatura em Informática pelo IFPI - Campus Teresina Zona Sul, nos anos de 2019 e 2020 esteve envolvido em vários projetos coordenados pela secretaria municipal de educação da cidade de Teresina, onde o foco era introduzir alunos da rede pública no mundo da programação e robótica. Hoje é instrutor dos cursos de Spring na TreinaWeb, mas diz que seu coração sempre pertencerá ao Python. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/cleyson-lima)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/07/05112250/SPRING-BOOT-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     7 anos atrás

    ##  [ Criando uma API REST com o Spring Boot ](https://www.treinaweb.com.br/blog/criando-uma-api-rest-com-o-spring-boot) 

     Todos os passos da criação de uma API REST com o framework Spring Boot do Java, no Visual Studio Code.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/08/deploy-de-uma-aplicacao-spring-boot-no-heroku-400x280.png)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     5 anos atrás

    ##  [ Deploy de uma aplicação Spring Boot no Heroku ](https://www.treinaweb.com.br/blog/deploy-de-uma-aplicacao-spring-boot-no-heroku) 

     Neste artigo veremos como podemos realizar o deploy de uma aplicação Spring Boot na nuvem com o Heroku.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/01/lendo-dados-do-excel-via-dde-no-java-400x280.png)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     6 anos atrás

    ##  [ Lendo dados do Excel via DDE no Java ](https://www.treinaweb.com.br/blog/lendo-dados-do-excel-via-dde-no-java) 

     Aprenda como ler dados do Excel via DDE no Java, utilizando a biblioteca JDDE da Pretty Tools.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/11/06103205/orm-lite-400x280.jpg)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     9 anos atrás

    ##  [ Utilizando o Micro ORM ServiceStack.OrmLite em uma aplicação ASP.NET Core ](https://www.treinaweb.com.br/blog/utilizando-o-micro-orm-servicestack-ormlite-em-uma-aplicacao-asp-net-core) 

     Aprenda na prática como fazer uso do micro framework ORM ServiceStack.OrmLite em uma aplicação ASP.NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/05/01125223/react-php-imagem-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     8 anos atrás

    ##  [ Introdução à programação assíncrona em PHP usando o ReactPHP ](https://www.treinaweb.com.br/blog/introducao-a-programacao-assincrona-em-php-usando-o-reactphp) 

     Uma introdução à programação assíncrona com PHP e uso básico dos componentes do ReactPHP.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/05/NEST-JS-UPLOAD-ARQUIVOS-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     3 anos atrás

    ##  [ Guia do framework NestJS ](https://www.treinaweb.com.br/blog/guia-do-framework-nestjs) 

     Neste guia do framework NestJS vamos fazer um compilado de tópicos úteis sobre o framework, desde criar um projeto básico até autenticação.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/03/29132239/PROTOCOLO-TUS-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     8 anos atrás

    ##  [ Implementando o protocolo tus em uma aplicação ASP.NET Core ](https://www.treinaweb.com.br/blog/implementando-o-protocolo-tus-em-uma-aplicacao-asp-net-core) 

     Realizar o upload de grandes arquivos pode ser uma dor de cabeça, mas o protocolo tus foi criado para facilitar este processo.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/05/03175136/NET-CORE-2.1-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     8 anos atrás

    ##  [ Novos recursos do ASP.NET Core 2.1 ](https://www.treinaweb.com.br/blog/novos-recursos-do-asp-net-core-2-1) 

     Conheça os novos recursos do ASP.NET Core 2.1.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/12/09153638/doctrine-ORM-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Primeiros passos com Doctrine ORM ](https://www.treinaweb.com.br/blog/primeiros-passos-com-doctrine-orm) 

     Conheça os principais conceitos do Doctrine ORM, como entidade, mapeamento e Entity Manager. Veja também como executar um exemplo prático de criação de registro no banco de dados.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/07/13150455/aplicacoes-self-contained-com-o-net-core-400x280.jpg)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     8 anos atrás

    ##  [ ASP.NET Core: Compreendendo AddMvc(), AddMvcCore(), AddControllers(), AddControllersWithViews() e AddRazorPages() ](https://www.treinaweb.com.br/blog/asp-net-core-compreendendo-addmvc-addmvccore-addcontrollers-addcontrollerswithviews-e-addrazorpages) 

     Aprenda quando utilizar os métodos AddMvc(), AddMvcCore(), AddControllers(), AddControllersWithViews() e AddRazorPages() em uma aplicação ASP.NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/03075049/Inteligência-Artificial-Selecionando-Cores-400x280.png)  [ Machine Learning ](https://www.treinaweb.com.br/blog/categoria/machine-learning) 

     7 anos atrás

    ##  [ Desenvolva uma Inteligência Artificial que reconhece cores diretamente no navegador com TensorFlow.js ](https://www.treinaweb.com.br/blog/desenvolva-uma-inteligencia-artificial-que-reconhece-cores-diretamente-no-navegador-com-tensorflow-js) 

     Aprenda a trabalhar com Machine Learning diretamente no navegador usando o TensorFlow.js

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/08/DEPLOY-SPRING-DIGITAL-OCEAN-400x280.jpg)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     3 anos atrás

    ##  [ Deploy de uma aplicação Spring Boot na DigitalOcean ](https://www.treinaweb.com.br/blog/deploy-de-uma-aplicacao-spring-boot-na-digitalocean) 

     Aprenda nesse artigo como realizar o Deploy de uma aplicação Spring Boot em uma VPS da DigitalOcena, usando ferramentas como o Nginx.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **17h 19min 28s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
