Tempo de leitura: menos de 1 minuto
Vou escrever hoje, sobre repository em Spring Boot.
Mas antes, caso seja seu primeiro contato com Spring Boot e não acompanhou os posts anteriores, seguem abaixo os links. São leituras recomendadas:
- Aprendendo Spring
- Aprendendo Spring #1: Startup de Projeto
- Aprendendo Spring: #2: Configurando Beans
- Como tratar exceções e redirecionar erros usando Spring (Autoria de Débora Adorni)
- Aprendendo Spring: #3: Enviando e-mail
- Aprendendo Spring: #4: Criando Converters
Dependências
Para usarmos repository em uma aplicação Spring Boot, primeiramente será necessário adicionar a dependência Starter Data JPA e de algum banco de dados (H2) .
Se tiver usando Maven, no arquivo pom.xml adicione estas linhas:
https://gist.github.com/edermfl/1fb05c40d091d87b3bbf4994c067dd0f
Caso esteja usando o Gradle, adicione a linha abaixo no arquivo build.gradle:
https://gist.github.com/edermfl/974210a94c5374d8eb8f8d708ebaf503
Configuração
Precisamos fazer a configuração de banco para que possamos persistir os objetos. Neste post usarei o banco de dados H2. Este BD é um banco em memória bem simples. Para maiores informações sobre o H2 consulte o Wikipédia.
Utilizei YAML para configurar o H2:
https://gist.github.com/edermfl/1447d017bd7d57475c4e44cd72d1451f
Implementação
Configuração pronta, vamos agora modela a entidade Cliente para que possamos persisti-la. Ela será bem simples, o nome da tabela será “CLIENTE” e possuirá apenas os atributos id, nome e rg:
https://gist.github.com/edermfl/acbbf07d0b237eccb051822057e594b3
Agora criaremos o repository. O Spring Boot por intermédio do Spring Data, nos auxilia muito deste quesito, já que ele possui implementações default de repository, assim o que precisamos fazer é basicamente criar uma interface.
Esta interface tem que estender a interface do Spring Data chamada JpaRepository. Vejamos o exemplo abaixo:
https://gist.github.com/edermfl/4fa16d7fb4181980d894fc3ae7729056
Na linha 1 anotei a classe com @Repository, esta anotação é apenas uma wrapper para @Component, que diz ao Spring Boot que essa classe deve estar disponível para ser injetada, funciona como anotação tipificadora.
Mas o mais importante desta interface está na linha 2. Como disse anteriormente, a interface deve estender JpaRepository, nela devemos informar qual é a entidade quer será persistida e qual o tipo do id da entidade. Talvez você nem precise declarar nenhum método, pois só que fazer isso, o repository já ganhou implementação de vários métodos:
- findAll;
- findOne;
- save;
- existis…
Mas estes métodos podem não ser suficientes. E se eu precisar fazer uma buscar clientes por RG? Simples basta fazermos o seguinte:
https://gist.github.com/edermfl/b8396304d43e80517e2b1292d3ec850e
Pronto, a implementação do findByRg fica a cargo do Spring Boot! Todos os atributos mapeados na entidade podem ser usados, no caso a entidade Cliente tem um atributo rg, por isso quando criamos findByRg o Spring sabe exatamente qual atributo usar na query.
É possível também pesquisar com varias condições, suponha que tenhamos que pesquisar por RG e nome do Cliente. Para isto, na declaração do método usamos a palavra reservada And, desta forma a declaração ficaria assim:
https://gist.github.com/edermfl/28b8cd9ec38714e2eba289e44de21491
Nota: A ordem dos paramentos devem respeitar a ordem dos atributos na declaração do método.
Além da palavra reservada And, você pode usar:
- Or;
- OrderBy;
- Asc e Desc;
- Count, Sum, Avg;
- …
Vendo estas implementações, você pode pensar que Spring Boot funciona muito bem, quando preciso fazer queries simples. Mas isto não é verdade, é possível usar fazer queries mais refinadas, neste caso a anotação @Query, pode ajudar bastante.
@Query recebe no value uma String, que nada mais é q a query que será executada. Você pode optar em usar JPql ou SQL nativo, como pode ser visto no exemplo abaixo:
https://gist.github.com/edermfl/36d9c3a6c5d862e59939635b4c305096
Para mais informação sobre a anotação @Query acesse a documentação do String Data.
Criei teste para realmente saber se o repository funciona:
https://gist.github.com/edermfl/33a9b166fe68f5861d6c929ef6cae0cd
Por fim deixo exemplo de usa de repository, executando uma query complexa (vários joins) e retornando uma lista de entidades:
https://gist.github.com/edermfl/ba5cff9e0d6a2c98dbe5986c5917a3cd
Para mais informação sobre Spring Data, não deixe de consultar a documentação oficial. Este post tem por objetivo apenas mostrar um pouquinho do potencial de “fodático” framework.
Deixo também o link do GitHub, caso alguém queira baixar o fonte do projeto.
Até mais pessoal.




Link permanente
Excelente tópico, adorei e aprendi bastante, obrigado por compartilhar estes ensinamentos.
Uma dúvida, como posso pesquisar no banco de dados uma informação que esteja gravada assim no banco de dados “Matematica” e no campo pesquisa, o usuário pesquisa matematica, ou MATEMATICA, tentei por o like “%:dadoProcurado%” porem como citei se o usuario procura por matematica minusculo ele não acha, pra achar o usuario tem que utilizar Mate por exemplo, para poder achar, lembro que no criteria do hibernate existe um comando que ele utiliza para não importar o que pesquisar, seria este MatchMode.ANYWHERE.
Novamente, obrigado pelo tópico.
Desde já
Eder