Ressource
- Probe: The actual example of a domain object with populated fields.
- ExampleMatcher: The ExampleMatcher carries details on how to match particular fields. It can be reused across multiple Examples.
- â Example: An Example consists of the probe and the ExampleMatcher. It is used to create the query.
Cette approche simplifie la crĂ©ation de requĂȘtes complexes sans avoir Ă Ă©crire de nombreuses mĂ©thodes de repository ou des requĂȘtes JPQL complexes
public interface EtudiantRepository extends
JpaRepository<Etudiant, Long>,
QueryByExampleExecutor<Etudiant> {
}Supposons que nous ayons une entitĂ© Etudiant avec les attributs nom, prenom et departement. Pour trouver des Ă©tudiants dâun certain dĂ©partement, vous pouvez crĂ©er une instance de Etudiant avec le dĂ©partement souhaitĂ© et utiliser cette instance comme exemple (== un probe) pour la requĂȘte
@Service
public class EtudiantService {
@Autowired
private final EtudiantRepository repository;
public List<Etudiant> trouverEtudiantsParDepartement(String departement) {
Etudiant probe = new Etudiant();
probe.setDepartement(departement); // On écrit un probe en settant le département
return repository.findAll(Example.of(probe));
}
}â Dans cet exemple, tous les Ă©tudiants appartenant au dĂ©partement spĂ©cifiĂ© seront retournĂ©s.â Ceci nous Ă©vite dâĂ©crire une Specification
Utilisation dâExampleMatcher pour des correspondances avancĂ©es
Par défaut, QBE utilise une correspondance exacte pour les attributs non nuls. Cependant, avec ExampleMatcher, vous pouvez personnaliser la stratégie de correspondance, par exemple pour effectuer des recherches insensibles à la casse ou des correspondances partielles
@Service
public class EtudiantService {
@Autowired
private final EtudiantRepository repository;
public List<Etudiant> rechercherEtudiants(String nom, String departement) {
Etudiant probe = new Etudiant();
probe.setNom(nom);
probe.setDepartement(departement);
ExampleMatcher matcher = ExampleMatcher.matching()
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
.withIgnoreCase()
.withIgnoreNullValues();
return repository.findAll(Example.of(probe, matcher));
}
}