Data
▶️ Spring Data
Spring Boot - Starters - Data
O Spring Data JPA é um projeto do Spring que facilita a integração e o uso do JPA (Java Persistence API) para trabalhar com bancos de dados relacionais. Ele tem como principais características:
- Abstração de Acesso a Dados: Oferece uma camada de abstração que simplifica a interação com o banco de dados, reduzindo a necessidade de escrever código repetitivo para manipulação de entidades.
- Repositórios: Fornece interfaces de repositório que podem ser estendidas para realizar operações de persistência, como salvar, buscar, atualizar e deletar entidades de forma fácil.
- Consultas Automatizadas: Permite gerar consultas SQL automaticamente a partir dos métodos da interface do repositório, sem a necessidade de escrever SQL manualmente.
- Suporte a Query Methods: Permite criar métodos personalizados para consultas complexas apenas com a definição do nome do método, usando a nomenclatura padrão do Spring Data.
- Pageable e Sorting: Oferece funcionalidades integradas de paginação e ordenação, permitindo consultas paginadas de maneira simples e eficiente.
- Suporte a Transações: Trabalha de forma integrada com o gerenciamento de transações do Spring, garantindo a consistência dos dados e o controle de transações.
- Customização: Possui flexibilidade para customizar comportamentos, como consultas personalizadas com JPQL (Java Persistence Query Language) ou SQL nativo, usando a anotação
@Query
. - Integração com outras tecnologias Spring: É altamente integrado com outros projetos do Spring, como Spring Boot, o que facilita a configuração e o uso de JPA em aplicações Java.
Essas características tornam o Spring Data JPA uma poderosa ferramenta para desenvolvedores que desejam simplificar o acesso a dados e se concentrar mais na lógica de negócios.
▶️ Flyway
O Flyway é uma ferramenta que permite o gerenciamento da evolução do esquema do banco de dados, onde os desenvolvedores podem escrever scripts SQL simples que podem ser executadas automaticamente pelo Flyway. Suporta diversos bancos de dados, como PostgreSQL, MySQL, Oracle, SQL Server, entre outros. Também pode ser integrado a aplicações Java, utilizando sua API nativa, ou a pipelines de CI/CD para automação de deploys.
Spring Boot - Migrations com Flyway
Para configuração em um projeto Java usando Maven, basta adicionar a seguinte dependência ao pom.xml:
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
flyway-core
era suficiente para rodar com qualquer banco. Um exemplo da dependência do PostgreSQL:<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-database-postgresql</artifactId>
</dependency>
Também é possível confirar algumas diretrizes no application.properties
de acordo com sua necessidade:
spring.flyway.enabled=true
:
Essa propriedade serve para ativarmos o Flyway.spring.flyway.locations=classpath:db/migration
:
Define o diretório onde as migrations SQL estão localizadas. O Flyway buscará e aplicará os arquivos .sql dentro desse caminho.spring.flyway.check-location=false
:
Desativa a verificação se o diretório definido em "spring.flyway.locations" existe ou contém migrations. Útil para evitar falhas na inicialização caso não haja migrations no diretório.spring.flyway.baseline-on-migrate=true
:
Essa propriedade permite criar a tabela de controle do Flyway (flyway_schema_history) caso o banco já tenha dados antes da primeira migração. Isso evita erros ao rodar as migrations pela primeira vez em um banco já existente.
Caso não seja configurado nenhum repositório específico, o Flyway usa como padrão o diretório: src/main/resources/db/migration/
Mas dependendo do uso e caso precise de diferentes ambientes e que precise rodar alternadamente, pode configurar esses diretórios.
Nisso, será necessário alterar no arquivo application.properties o ambiente que deseja rodar:
spring.flyway.locations=classpath:db/migration/dev
Os scripts são chamadas migrations (migração) e contêm instruções para criação, modificação ou exclusão de tabelas, colunas e índices, garantindo que todas as alterações sejam versionadas e aplicadas corretamente. O conceito de migração é essencial para manter a integridade e consistência dos dados em projetos com múltiplos desenvolvedores ou em ambientes com diferentes versões do banco de dados. Ferramentas como o Flyway ajudam a gerenciar essas mudanças de forma organizada e automatizada. As migrações são arquivos SQL ou Java colocados em um diretório específico do projeto.
Pela convenção, a cada script é atribuído um número de versão exclusivo e os arquivos devem seguir um padrão de nomenclatura para garantir a execução na ordem correta: V<versão>__<descrição>.sql
. Exemplos:
V1__Criar_Tabela_Usuarios.sql
V2__Adicionar_Coluna_Email.sql
V3__Criar_Tabela_Pedidos.sql
Levando para o nosso cenário do CRM, vamos configurar a tabela de cliente, podemos usar a seguinte migration, que vai ser V1__Criar_Tabela_Cliente.sql
:
CREATE TABLE tab_cliente (
id SERIAL PRIMARY KEY,
nome VARCHAR(200) NOT NULL,
dt_aniversario DATE NOT NULL,
renda DECIMAL(15,2);
);
Seguindo os atributos do CRM vimos que ficou faltando o atributo cidade, nesse caso podemos fazer uma nova migration adicionando o atributo faltante na tabela. Nesse caso a migration será V2__Adicionar_Coluna_Cidade.sql
:
ALTER TABLE usuarios ADD COLUMN cidade VARCHAR(50);