J'essaie de créer une méthode dans CrudRepository qui pourra me donner la liste des utilisateurs, dont les noms d'utilisateur sont COMME le paramètre d'entrée (non seulement commencent par, mais le contiennent également). J'ai essayé d'utiliser la méthode"findUserByUsernameLike(@Param("username") String username)"
mais comme il est dit dans la documentation Spring, cette méthode est égale à " where user.username like ?1
". Ce n'est pas bon pour moi, car je l'ai déjà dit que j'essaie d'obtenir tous les utilisateurs dont le nom d'utilisateur contient ...
J'ai écrit une requête à la méthode mais elle ne se déploie même pas.
@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);
}
Quelqu'un peut-il m'aider avec ça?
containing
pour bénéficier des index, voir docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/referenceRéponses:
Essayez d'utiliser l'approche suivante (cela fonctionne pour moi):
Remarque: le nom de la table en JPQL doit commencer par une majuscule.
la source
WHERE UPPER(u.username) LIKE CONCAT('%',UPPER(:username),'%')
pour faire une recherche insensible à la casse@Param
sont nettoyés , donc non.En utilisant J'aime: sélectionnez ... comme: nom d'utilisateur
Démarrage avec: sélectionnez ... comme: nom d'utilisateur%
EndingWith: sélectionnez ... comme%: nom d'utilisateur
Contenant: sélectionnez ... comme%: username%
Notez que la réponse que vous recherchez est le numéro 4 . Vous n'êtes pas obligé d'utiliser @Query
la source
List<User> findByUsernameContainingIgnoreCase(String username);
StartingWith: select ... like :username%
etEndingWith: select ... like %:username
... de toute façon, une excellente réponse ... devrait être celle acceptée. Merci.Une autre façon: à la place de la
CONCAT
fonction, nous pouvons utiliser un double tube :: nom || '%'Vous pouvez mettre n'importe où, préfixe, suffixe ou les deux
la source
List<User> findByUsernameContainingIgnoreCase(String username);
afin d'ignorer les problèmes de cas
la source
Facile à utiliser suivant (pas besoin d'utiliser CONCAT ou ||):
Documenté dans: http://docs.spring.io/spring-data/jpa/docs/current/reference/html .
la source
Pour votre cas, vous pouvez utiliser directement les méthodes JPA. C'est comme ci-dessous:
Contenant: sélectionnez ... comme%: username%
ici, IgnoreCase vous aidera à rechercher l'élément en ignorant la casse.
Voici quelques méthodes associées:
Comme
findByFirstnameLike
… Où x.firstname aime? 1
Commençant par
findByFirstnameStartingWith
… Où x.firstname comme? 1 (paramètre lié avec% ajouté)
EndingWith
findByFirstnameEndingWith
… Où x.firstname comme? 1 (paramètre lié avec% préfixé)
Contenant
findByFirstnameContaining
… Où x.firstname comme? 1 (paramètre lié enveloppé dans%)
Plus d'infos, voir ce lien et ce lien
J'espère que ceci vous aidera :)
la source
Cette méthode fonctionne pour moi (en utilisant Spring Boot version 2.0.1. RELEASE):
Expliquant: Les? 1,? 2,? 3 etc. sont des espaces réservés les premier, deuxième, troisième paramètres, etc. Dans ce cas, il suffit d'avoir le paramètre entouré de% comme s'il s'agissait d'une requête SQL standard mais sans Guillemets simples.
la source
@Query("SELECT u.username FROM User u WHERE u.username LIKE %:username%")
la source
J'ai essayé ce code et cela fonctionne.
la source