Adicionar 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
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
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.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 3.45
Adicionar 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
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
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.
Obrigado pelo seu feedback!