0Pricing
Java Academy · Aula

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

  1. Mapeamento de entidades com anotações JPA
  2. Repositórios do Spring Data e métodos de consulta
  3. Relacionamentos um-para-muitos e muitos-para-muitos
  4. Paginação, ordenação e projeções
← Voltar para Java Academy