Olá Forum, tudo bem ?
A JPARepository é uma interface que vem com alguns métodos pré definidos, minha duvida é a seguinte, já que não se pode implementar método em uma interface como a JPARepository implementa esse métodos ?
Abraços
Olá Forum, tudo bem ?
A JPARepository é uma interface que vem com alguns métodos pré definidos, minha duvida é a seguinte, já que não se pode implementar método em uma interface como a JPARepository implementa esse métodos ?
Abraços
Olá! Tudo bem? Todas as interfaces do tipo repository do spring usam alguns recursos para implementar os métodos automaticamente, sendo eles através da nomenclatura dos métodos, que seguindo um padrão podem implementar algumas consultas simples e, para comandos SQL mais complexos o Spring oferece recursos como a anotação @Query que vai ficar acima do método e especificar um comando SQL completo a ser executado. Por exemplo:
public interface UserRepository extends JpaRepository<User, Long> {
// --- Query personalizada ---
// vai gerar um método que executa esse SELECT por debaixo dos panos
@Query("SELECT usuario FROM User usuario")
Stream<User> retornaTodosOsUsuarios();
// -------------------------------------
// --- Query seguindo o padrão de nomenclatura do Spring ---
// Vai converter esse nome para uma query parecida com essa:
// "SELECT usuario FROM User usuario WHERE usuario.email=:email"
User findByEmail(String email);
// --------------------------------------------------------------------------------------
}
O exemplo acima mostra como o nome dos métodos e as anotações são usadas para criar os comandos SQL, que só deverão então ser executados por uma classe concreta. O Spring por debaixo dos panos usa as classes RepositoryFactorySupport e a classe EntityManager para criar as implentações das interfaces que criamos, o que facilita muito com a agilidade de nosso trabalho como desenvolvedores. Para mais informações, tem várias páginas sobre isso na documentação do Spring, espero ter ajudado! Links da documentação: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/ e https://docs.spring.io/spring-data/data-commons/docs/1.6.1.RELEASE/reference/html/repositories.html