A manipulação de entidades no Spring é facilitada pela criação de uma interface chamada Repository. Isso facilita muito para o gerenciamento das entidades sem precisar de usar o EntityManager, de forma mais trabalhosa. Embora usemos essa interface usando Spring Data, nem sempre sabemos o que está acontecendo por baixo dos panos.
Ok, Matheus, mas como que se usa esse tal de Spring Data Repository mesmo?
O objetivo de se usar os repositories do Spring Data é reduzir a quantidade de código necessário para manusear as entidades de forma complexa. Para isso, criamos a interface repository extendendo outra interface como, por exemplo, a CrudRepository. O que essa extensão causa é o provisionamento de alguns métodos para performar um CRUD da entidade no banco de dados, isto é, Criar, Ler, Atualizar e Deletar dados. É possível estender algumas outras interfaces, como a JpaRepository com funcionalidades de listagem e paginação e, ainda, complementar as assinaturas dessas interfaces e usar anotações para a inserção de queries customizadas e coisas afins.
Um exemplo seria:
@Repository
public interface Repositorio extends CrudRepository<Pessoa, Integer> {
Pessoa findByName(@Param("name") String name);
}
Dentro dos diamantes do CrudRepository há a entidade a ser manipulada e, em seguida, o tipo da Primary Key da entidade.
A assinatura do método entre as chaves significa um método customizado que desejo que a interface seja capaz de produzir, que foge do escopo do que CrudRepository fornece..
Beleza, entendi, mas como que uma interface é capaz de realizar alguma ação, sendo que ela é só uma assinatura?
É aí, meu querido, que surge a mágica embaixo dos panos.
Lembra que é criada uma interface estendendo as interfaces CrudRepository ou JpaRepository? Então, nesse momento o Spring implementa essa interface por baixo dos panos na classe SimpleJpaRepository, que fica responsável por manipular a entidade. Essa classe fornece um conjunto mais complexo do que o EntityManager e é possível encontrar a documentação aqui.
Então é só isso que rola embaixo dos panos? Easy.
Não é bem assim, meu jovem.
Um exemplo de coisas mais aprofundadas a se inteirar seria o proxy, JdkDynamicAopProxy, que em linhas gerais é usado para gerenciar os métodos customizados criados em sua interface de repositório. Caso você use a interface com os métodos CRUD habilitados pela extensão de CrudRepository, o proxy simplesmente te leva até o SimpleJpaRepository. No entanto, se você utilizar os seus métodos customizados, o proxy te redirecionará para as outras estruturas Spring Data para que sua query específica seja alcançada.
Então, no caso da nossa implementação repositorio, os métodos nativos de CrudRepository seriam redirecionados para o SimpleJpaRepository, enquanto o método FindByName seria redirecionado para outras estruturas de serviço do Spring Data.
Top comments (0)