Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Adicionar o Banco de Dados à Nossa Aplicação | Trabalhando com Bancos de Dados
Spring Boot Backend

bookAdicionar o Banco de Dados à Nossa Aplicação

No capítulo anterior, abordamos o que são JPA e Hibernate. Neste capítulo, vamos integrar um banco de dados à nossa aplicação e realizar operações CRUD (Criar, Ler, Atualizar, Excluir).

Exemplo de Trabalho com Banco de Dados:

Personalização do Modelo

A primeira coisa que precisamos fazer é anotar o modelo para que o Hibernate possa trabalhar com ele e entender a qual tabela ele pertence.

Book.java

Book.java

copy
12345678910
@Getter @Setter @Entity(name = "book") @Table(name = "book") public class Book { private String id; private String name; private String author; private String price; }

Na anotação @Entity(name = "books"), o parâmetro name permite especificar o nome da entidade, que por padrão é o nome da classe.

A anotação @Table é utilizada para definir configurações específicas para a tabela associada à entidade.

No nosso caso, esta tabela é criada por meio de migrações, portanto não precisamos criá-la manualmente.

Também precisamos que nossa entidade gere automaticamente um ID para atribuir um valor único no banco de dados. Para isso, podemos utilizar a anotação @Id no campo que representa nosso ID, juntamente com a anotação @GeneratedValue.

@Id
@GeneratedValue(strategy = GenerationType.UUID)
private String id;

As anotações @Id e @GeneratedValue(strategy = GenerationType.UUID) especificam que o campo id é uma chave primária que é gerada automaticamente no formato UUID.

Isso garante identificadores de string únicos para cada registro na tabela, o que é benéfico para sistemas distribuídos e assegura a unicidade global dos identificadores. UUIDs são armazenados como strings.

Adicionando o Repositório

Atualmente, nosso repositório simula um banco de dados armazenando todas as entidades em uma List. Mas e se eu dissesse que utilizar um banco de dados real é na verdade muito mais fácil!

Para interagir com um banco de dados real, podemos utilizar a interface JpaRepository, que oferece uma ampla variedade de métodos prontos para trabalhar com dados.

BookRepository.java

BookRepository.java

copy
1234
@Repository public interface BookRepository extends JpaRepository<Book, String> { // JpaRepository already provides methods for CRUD operations }

Em JpaRepository<Book, String>, passamos dois parâmetros: Book, que representa o tipo de entidade com o qual o repositório irá trabalhar, e String, que é o tipo de dado da chave primária (ID) para a entidade Book.

E isso é tudo o que precisamos! Agora temos um repositório totalmente funcional!

Métodos Principais do JpaRepository

Criando Consultas SQL Personalizadas

Spring Data JPA pode gerar consultas automaticamente se o método for nomeado de acordo com um padrão que esteja alinhado com a estrutura dos dados. Isso é feito utilizando palavras-chave específicas que indicam como a consulta deve ser construída.

Resumo breve do vídeo

List<Book> findBookByAuthor(String author);

Este método gera automaticamente uma consulta SQL que busca todos os livros do author especificado. A consulta gerada ficará assim:

SELECT * FROM book WHERE author = ?;

Como Funciona

O nome do método findBookByAuthor(String author) é construído da seguinte forma: começa com o prefixo findBook, indicando que o método realiza uma busca. Em seguida, vem ByAuthor, que representa o campo na entidade Book que será utilizado para a busca.

Quando este método é chamado, o Spring Data JPA gera automaticamente uma consulta que busca por registros onde o campo author corresponde ao parâmetro fornecido.

Gerando Consultas SQL com o @Query

A anotação @Query no Spring Data JPA permite o uso tanto de JPQL quanto de SQL nativo, proporcionando flexibilidade na escolha da abordagem mais adequada.

JPQL

JPQL (Java Persistence Query Language) trabalha com objetos e seus atributos.

@Query("SELECT b FROM book b WHERE b.author = :author")
List<Book> findBookByAuthor(String author);

Esta consulta busca todos os objetos Book onde o campo author corresponde ao valor fornecido. JPQL é mais abstrato e reflete a estrutura do modelo de dados.

SQL Nativo

SQL Nativo interage diretamente com as tabelas do banco de dados.

@Query(value = "SELECT * FROM books WHERE author = :author", nativeQuery = true)
List<Book> findBookByAuthor(String author);

Neste caso, a consulta opera na tabela book, permitindo o uso de funções SQL específicas e otimizações.

Escolhendo uma Abordagem

Para consultas simples que estejam alinhadas com o modelo de dados, utilize JPQL. Caso seja necessário realizar uma consulta complexa ou utilizar funções específicas do banco de dados, opte por SQL nativo.

Dessa forma, @Query oferece flexibilidade para alternar facilmente entre as duas abordagens conforme a necessidade.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 5

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 3.45

bookAdicionar o Banco de Dados à Nossa Aplicação

Deslize para mostrar o menu

No capítulo anterior, abordamos o que são JPA e Hibernate. Neste capítulo, vamos integrar um banco de dados à nossa aplicação e realizar operações CRUD (Criar, Ler, Atualizar, Excluir).

Exemplo de Trabalho com Banco de Dados:

Personalização do Modelo

A primeira coisa que precisamos fazer é anotar o modelo para que o Hibernate possa trabalhar com ele e entender a qual tabela ele pertence.

Book.java

Book.java

copy
12345678910
@Getter @Setter @Entity(name = "book") @Table(name = "book") public class Book { private String id; private String name; private String author; private String price; }

Na anotação @Entity(name = "books"), o parâmetro name permite especificar o nome da entidade, que por padrão é o nome da classe.

A anotação @Table é utilizada para definir configurações específicas para a tabela associada à entidade.

No nosso caso, esta tabela é criada por meio de migrações, portanto não precisamos criá-la manualmente.

Também precisamos que nossa entidade gere automaticamente um ID para atribuir um valor único no banco de dados. Para isso, podemos utilizar a anotação @Id no campo que representa nosso ID, juntamente com a anotação @GeneratedValue.

@Id
@GeneratedValue(strategy = GenerationType.UUID)
private String id;

As anotações @Id e @GeneratedValue(strategy = GenerationType.UUID) especificam que o campo id é uma chave primária que é gerada automaticamente no formato UUID.

Isso garante identificadores de string únicos para cada registro na tabela, o que é benéfico para sistemas distribuídos e assegura a unicidade global dos identificadores. UUIDs são armazenados como strings.

Adicionando o Repositório

Atualmente, nosso repositório simula um banco de dados armazenando todas as entidades em uma List. Mas e se eu dissesse que utilizar um banco de dados real é na verdade muito mais fácil!

Para interagir com um banco de dados real, podemos utilizar a interface JpaRepository, que oferece uma ampla variedade de métodos prontos para trabalhar com dados.

BookRepository.java

BookRepository.java

copy
1234
@Repository public interface BookRepository extends JpaRepository<Book, String> { // JpaRepository already provides methods for CRUD operations }

Em JpaRepository<Book, String>, passamos dois parâmetros: Book, que representa o tipo de entidade com o qual o repositório irá trabalhar, e String, que é o tipo de dado da chave primária (ID) para a entidade Book.

E isso é tudo o que precisamos! Agora temos um repositório totalmente funcional!

Métodos Principais do JpaRepository

Criando Consultas SQL Personalizadas

Spring Data JPA pode gerar consultas automaticamente se o método for nomeado de acordo com um padrão que esteja alinhado com a estrutura dos dados. Isso é feito utilizando palavras-chave específicas que indicam como a consulta deve ser construída.

Resumo breve do vídeo

List<Book> findBookByAuthor(String author);

Este método gera automaticamente uma consulta SQL que busca todos os livros do author especificado. A consulta gerada ficará assim:

SELECT * FROM book WHERE author = ?;

Como Funciona

O nome do método findBookByAuthor(String author) é construído da seguinte forma: começa com o prefixo findBook, indicando que o método realiza uma busca. Em seguida, vem ByAuthor, que representa o campo na entidade Book que será utilizado para a busca.

Quando este método é chamado, o Spring Data JPA gera automaticamente uma consulta que busca por registros onde o campo author corresponde ao parâmetro fornecido.

Gerando Consultas SQL com o @Query

A anotação @Query no Spring Data JPA permite o uso tanto de JPQL quanto de SQL nativo, proporcionando flexibilidade na escolha da abordagem mais adequada.

JPQL

JPQL (Java Persistence Query Language) trabalha com objetos e seus atributos.

@Query("SELECT b FROM book b WHERE b.author = :author")
List<Book> findBookByAuthor(String author);

Esta consulta busca todos os objetos Book onde o campo author corresponde ao valor fornecido. JPQL é mais abstrato e reflete a estrutura do modelo de dados.

SQL Nativo

SQL Nativo interage diretamente com as tabelas do banco de dados.

@Query(value = "SELECT * FROM books WHERE author = :author", nativeQuery = true)
List<Book> findBookByAuthor(String author);

Neste caso, a consulta opera na tabela book, permitindo o uso de funções SQL específicas e otimizações.

Escolhendo uma Abordagem

Para consultas simples que estejam alinhadas com o modelo de dados, utilize JPQL. Caso seja necessário realizar uma consulta complexa ou utilizar funções específicas do banco de dados, opte por SQL nativo.

Dessa forma, @Query oferece flexibilidade para alternar facilmente entre as duas abordagens conforme a necessidade.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 5
some-alt