Repositórios do Spring Data e métodos de consulta
Estenda JpaRepository, defina métodos de consulta por convenções de nomenclatura e use @Query para JPQL personalizado.
Repositórios do Spring Data e métodos de consulta é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.
Repositórios do Spring Data JPA
Estenda JpaRepository<Entity, ID> para obter gratuitamente métodos de CRUD, paginação e ordenação. O Spring gera a implementação na inicialização — não é necessário escrever SQL nem código repetitivo de DAO.
public interface UserRepository extends JpaRepository<User, Long> {
// Free: findAll, findById, save, delete, count, existsById, etc.
}Métodos de consulta derivados
O Spring Data gera consultas a partir dos nomes dos métodos. A convenção de nomenclatura segue: findBy + propriedade + condições opcionais.
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByStatus(UserStatus status);
Optional<User> findByEmail(String email);
List<User> findByAgeGreaterThanAndStatusOrderByNameAsc(int age, UserStatus s);
boolean existsByEmail(String email);
long countByStatus(UserStatus status);
}Palavras-chave compatíveis nos nomes dos métodos
Principais palavras-chave de nomenclatura: And, Or, Is/Equals, Between, LessThan/GreaterThan, Like/NotLike, In/NotIn, IsNull/IsNotNull, OrderBy, First/Top.
List<User> findTop5ByStatusOrderByCreatedAtDesc(UserStatus s);
List<User> findByNameContainingIgnoreCase(String fragment);
List<User> findByCreatedAtBetween(LocalDateTime from, LocalDateTime to);@Query para JPQL personalizado
Use @Query para consultas complexas que não podem ser expressas como nomes de métodos. O JPQL usa nomes de classes de entidades e campos, não nomes de tabelas ou colunas.
@Query("SELECT u FROM User u WHERE u.email = :email AND u.status = :status")
Optional<User> findActiveByEmail(@Param("email") String email,
@Param("status") UserStatus status);
@Query("SELECT u.name, COUNT(o) FROM User u JOIN u.orders o GROUP BY u.name")
List<Object[]> countOrdersPerUser();Consultas nativas
Use nativeQuery = true para escrever SQL bruto. Isso é útil para recursos específicos do banco de dados, como ON CONFLICT, funções de janela ou pesquisa de texto completo.
@Query(value = "SELECT * FROM users WHERE tsv @@ plainto_tsquery(:q)",
nativeQuery = true)
List<User> fullTextSearch(@Param("q") String query);Consultas de alteração com @Modifying
Anote as consultas de atualização/exclusão com @Modifying. Adicione @Transactional, pois as consultas de alteração exigem uma transação ativa.
@Modifying
@Transactional
@Query("UPDATE User u SET u.status = :s WHERE u.lastLogin < :cutoff")
int deactivateInactiveUsers(@Param("s") UserStatus s,
@Param("cutoff") LocalDateTime cutoff);Métodos de exclusão derivados
O Spring Data também gera consultas de exclusão a partir dos nomes dos métodos — algo conveniente para operações de limpeza.
void deleteByStatus(UserStatus status);
long deleteByCreatedAtBefore(LocalDateTime cutoff);Interfaces parciais de repositório: CrudRepository, PagingAndSortingRepository
Use interfaces base mais restritas quando não precisar de todos os métodos de JpaRepository. CrudRepository oferece operações básicas de CRUD; PagingAndSortingRepository adiciona findAll(Pageable).
public interface ReadOnlyUserRepository extends PagingAndSortingRepository<User, Long> {
// Only paging + sorting — no save/delete
}@EntityGraph para otimização de carregamento
Use @EntityGraph para substituir a estratégia padrão de carregamento por consulta, carregando associações antecipadamente sem alterar o mapeamento da entidade.
@EntityGraph(attributePaths = {"orders", "orders.items"})
@Query("SELECT u FROM User u WHERE u.id = :id")
Optional<User> findWithOrders(@Param("id") Long id);Implementações personalizadas de repositório
Adicione um método personalizado criando uma interface e uma classe de implementação com a convenção de nomenclatura UserRepositoryCustom + UserRepositoryCustomImpl. O Spring as combina.
public interface UserRepositoryCustom {
List<User> searchByCriteria(UserSearchCriteria criteria);
}
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
@PersistenceContext EntityManager em;
public List<User> searchByCriteria(UserSearchCriteria c) {
// use Criteria API or JdbcTemplate
}
}
public interface UserRepository extends JpaRepository<User,Long>, UserRepositoryCustom {}Verificação rápida
Qual anotação é necessária junto com @Query para instruções UPDATE/DELETE?
Recapitulação
Estenda JpaRepository para obter operações CRUD gratuitamente. Use nomes de métodos derivados para consultas simples. Use @Query para JPQL complexo ou SQL nativo. @Modifying+@Transactional para atualizações. @EntityGraph para ajustar o carregamento.
Perguntas Frequentes
A aula “Repositórios do Spring Data e métodos de consulta” é grátis?
Sim — o texto completo de “Repositórios do Spring Data e métodos de consulta” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.
O que vou aprender em “Repositórios do Spring Data e métodos de consulta”?
Estenda JpaRepository, defina métodos de consulta por convenções de nomenclatura e use @Query para JPQL personalizado. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Java Academy?
Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Repositórios do Spring Data e métodos de consulta”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Java Academy?
Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Mapeamento de entidades com anotações JPA
- Repositórios do Spring Data e métodos de consulta
- Relacionamentos um-para-muitos e muitos-para-muitos
- Paginação, ordenação e projeções