Derived Query

Pesquisa uma entidade por algum atributo através do nome do método.

@Repository
public interface FuncionarioRepository extends CrudRepository<Funcionario, Integer> {

    List<Funcionario> findByNome(String nome);
}

Também pode ser usado passando mais funções SQL

List<Funcionario> findByNomeLike(String nome);

List<Funcionario> findByNomeEndingWith(String nome)

List<Funcionario> findByNomeStartingWith(String nome)

List<Funcionario> findByNomeIsNull()

List<Funcionario> findByNomeIsNotNull()

List<Funcionario> findByNomeOrderByNomeAsc(String nome);

Mais detalhes:

Usando JPQL

Em consultas mais complexa que exige um maior número de parâmetros, é recomendado utilizar JPQL ao invés de Derived Query, pois o nome do método complexo de desenvolver e interpretar.

List<Funcionario> findByNomeAndSalarioGreaterThanAndDataContratacao
(String nome, Double salario, LocalDate data);
@Query("SELECT f FROM Funcionario f " +
        "WHERE f.nome= :nome AND f.salario >= :salario AND f.dataContratacao = :data")
List<Funcionario> findNomeDataContratacaoSalarioMaior(String nome, Double salario, LocalDate data);

Para o Spring-Data reconhecer o método, é utilizado a anotação @Query que recebe um JPQL como parâmetro.

Native Query