Estou tentando fazer um método em CrudRepository que será capaz de me dar uma lista de usuários, cujos nomes de usuário são como o parâmetro de entrada (não só começa com, mas também o contém). Tentei usar o método, "findUserByUsernameLike(@Param("username") String username)"
mas como é dito na documentação do Spring, esse método é igual a " where user.username like ?1
". Não é bom para mim, como já disse que estou tentando obter todos os usuários cujo nome de usuário contenha ...
Eu escrevi uma consulta ao método, mas nem mesmo implanta.
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
@Query("select u from user u where u.username like '%username%'")
List<User> findUserByUsernameLike(@Param("username") String username);
}
Alguém pode me ajudar com isso?
containing
para se beneficiar dos índices, consulte docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/…Respostas:
Tente usar a seguinte abordagem (funciona para mim):
Aviso: o nome da tabela em JPQL deve começar com letra maiúscula.
fonte
WHERE UPPER(u.username) LIKE CONCAT('%',UPPER(:username),'%')
para fazer uma pesquisa que não diferencia maiúsculas de minúsculas@Param
s são higienizados, então não.Usando Curtir: selecione ... como: nome de usuário
Começando com: selecione ... como: nome de usuário%
EndingWith: select ... like%: username
Contendo: select ... like%: username%
Observe que a resposta que você está procurando é a número 4 . Você não precisa usar @Query
fonte
List<User> findByUsernameContainingIgnoreCase(String username);
StartingWith: select ... like :username%
eEndingWith: select ... like %:username
... de qualquer maneira ótima resposta ... deve ser a aceita. Obrigado.Outra maneira: em vez da
CONCAT
função, podemos usar tubo duplo :: sobrenome || '%'Você pode colocar em qualquer lugar, prefixo, sufixo ou ambos
fonte
List<User> findByUsernameContainingIgnoreCase(String username);
a fim de ignorar problemas de caso
fonte
Seguimento fácil de usar (sem necessidade de usar CONCAT ou ||):
Documentado em: http://docs.spring.io/spring-data/jpa/docs/current/reference/html .
fonte
Para o seu caso, você pode usar métodos JPA diretamente. É como abaixo:
Contendo: select ... like%: username%
aqui, IgnoreCase irá ajudá-lo a pesquisar o item ignorando o caso.
Aqui estão alguns métodos relacionados:
Gostar
findByFirstnameLike
… Onde x.firstname gosta? 1
Começando com
findByFirstnameStartingWith
… Onde x.firstname like? 1 (parâmetro vinculado a% anexado)
EndingWith
findByFirstnameEndingWith
… Onde x.firstname like? 1 (parâmetro vinculado a% prefixado)
Contendo
findByFirstnameContaining
… Onde x.firstname like? 1 (limite de parâmetro envolvido em%)
Mais informações, veja este link e este link
Espero que isso ajude você :)
fonte
Esta maneira funciona para mim, (usando Spring Boot versão 2.0.1. RELEASE):
Explicando: O? 1,? 2,? 3 etc. são espaços reservados para o primeiro, segundo, terceiro parâmetros, etc. Neste caso é suficiente ter o parâmetro cercado por% como se fosse uma consulta SQL padrão, mas sem o aspas simples.
fonte
@Query("SELECT u.username FROM User u WHERE u.username LIKE %:username%")
fonte
Eu tentei este código e funciona.
fonte