Neste curso, busco uma introdução ao ecossitema Spring, prestando muita atenção em conceitos importantes do funcionamento do Spring. Além disso, me aprofundo nos estudos de persistência de dados com Java, dando continuidade aos estudos de JDBC e JPA.
Neste readme, procurei abordar os conceitos visto durante o curso, entretanto não me aprofundo tanto. No notion procuro me aprofundar mais no conceitos, utilizando código, esquemas, imagens, problemas que enfrentei e soluções para os mesmos, e mais conteúdo para complementar o estudo. Se você tem interesse nesses detalhes, pode acessar aqui.
- Uso do repositórios
- Geração de querys sem escrita de JPQL
- Paginação e Ordenação
- Querys dinâmicas através dos Specifications
- Anotações Spring
- Injeção de dependências
- JDK8+
- IDE
- Banco de dados
- Client Banco
Será utilizado o Spring Initializr para criar a aplicação com a seguinte configuração:
Após gerar a aplicação, basta importá-la em alguma IDE.
Através do mvn repository, busque a dependência do driver do Banco de dados escolhido para o projeto, e adicione no arquivo pom.xml. Neste caso, foi utilizado o driver do Mysql.
Com o driver do Banco de dados adicionado ao projeto, é necessário informar à aplicação as credenciais de acesso, isso é feito no arquivo application.properties.
O Spring Data acopla todos os elementos listados abaixo. Dessa forma, não é preciso implementar vários objetos, como no caso do EntityManager da JPA, o Spring Data ficará responsável por isso.
Com o banco gerado, é possível popular as tabelas. Isso é feito através da interface Repository. O CrudRepository facilita a persistência de objetos, pois diferente da JPA, não é preciso implementar os métodos do CRUD, eles são gerados pelo Spring Data.
O Spring data facilita muito a implementação das operações de inserção de persistência. A interface CrudRepository oferece método para inserção/atualização, leitura e remoção de dados das entidades.
-
Salvar e Atualizar: Para salvar ou atualizar uma entidade no Banco de dados com o repositório é usado o método save().
-
Visualizar: Para visualizar registros do Banco de dados, o repository oferece alguns métodos: findById(), findAll() e findAllById().
-
Deletar: Para deletar, existe o método delete(), deleteById(), deleteAll(), deleteAllById().
Além da consultas padrões oferecidas pelos métodos do CrudRepository, também é possível criar consultas personalizadas. Existe três formas de implementar essas consultas.
- Derived Query: Queries criadas através de código Java.
- JPQL: Queries criadas através de uma estrutura SQL, porém utilizando o nome das entidades Java.
- Native Query: Queries padrões SQL.
A Derived Query é um recurso muito interessante. Desta forma, as queries são geradas através do nome do método, que segue um padrão para que o Spring data gere a query automaticamente.
É um forma de consulta que visa realizar consultas mais rápidas através da paginação dos dados. No Spring data, isto é feito através dos Repositories que herdam de PagingAndSortingRepository. Com o repository Herdando dessa Classe, é possível passar um objeto Pageable para o método find(). Desse modo, é feita a paginação da consulta.
A Projeção é utilizada quando é necessário criar queries personalizadas, que retornam apenas campos específicos dos registros. Uma Projeção é uma interface que define métodos get() para armazenar os atributos consultados. Também é possível utilizar classes DTOs para receber os dados das queries personalizadas. Não é possível criar queries personalizadas através do Derived Query, por isso é utilizado Native Query.
No Spring-data, Queries dinâmicas são feitas através de Specifications. A Specification é uma camada que abstrai toda a complexidade da API criteria, facilitando o desenvolvimento de consultas dinâmicas.