Olá, Fabiano!
Para realizar uma pesquisa com parâmetros "acoplados", ou seja, que "conversam" entre si, podemos utilizar o recurso de Specifications do Spring Data JPA.
Com as Specifications, é possível criar consultas mais complexas, com diversos critérios que podem ser combinados de diferentes formas.
No seu caso, para buscar "nomes que contém a letra B" E "salários acima de 6.000", podemos criar duas Specifications, uma para cada critério, e combiná-las utilizando o método and().
Segue um exemplo de como ficaria o código:
public static Specification<Funcionario> nomeContemLetraB() {
return (root, query, builder) -> builder.like(root.get("nome"), "%b%");
}
public static Specification<Funcionario> salarioMaiorQue6000() {
return (root, query, builder) -> builder.greaterThan(root.get("salario"), 6000);
}
public static Specification<Funcionario> nomeContemLetraBESalarioMaiorQue6000() {
return nomeContemLetraB().and(salarioMaiorQue6000());
}
No exemplo acima, criamos duas Specifications, uma para buscar nomes que contém a letra "b" e outra para buscar salários maiores que 6.000. Em seguida, criamos uma terceira Specification que combina as duas utilizando o método and().
Para utilizar essa Specification na sua consulta, basta chamar o método findAll() do seu repositório passando a Specification como parâmetro:
List<Funcionario> funcionarios = funcionarioRepository.findAll(nomeContemLetraBESalarioMaiorQue6000());
Espero ter ajudado e bons estudos!