Gérer les paramètres facultatifs dans QueryDSL
Je suis en utilisant QueryDSL avec SpringData.
J'ai le Tableau dire, Employee
et j'ai créé une entité de la classe de dire, EmployeeEntity
J'ai écrit à la suite d' service méthode
public EmployeeEntity getEmployees(String firstName, String lastName)
{
QEmployeeEntity employee = QEmployeeEntity.employeeEntity;
BooleanExpression query = null;
if(firstName != null)
{
query = employee.firstName.eq(firstName);
}
if(lastName != null)
{
query = query.and(employee.lastName.eq(lastName)); //NPException if firstName is null as query will be NULL
}
return empployeeDAO.findAll(query);
}
Comme ci-dessus j'ai commenté la NPException
. Comment utiliser QueryDSL pour les Paramètres facultatifs dans QueryDSL à l'aide de Données du Printemps?
Merci 🙂
OriginalL'auteur Prashant Shilimkar | 2014-05-20
Vous devez vous connecter pour publier un commentaire.
BooleanBuilder
peut être utilisé comme une dynamique constructeur pour les expressions booléennes:OriginalL'auteur Timo Westkämper
BooleanBuilder est bon. Vous pouvez également envelopper et d'ajouter "en option" méthodes afin d'éviter la si les conditions:
Par exemple, pour "et" vous pouvez écrire: (Java 8 lambdas sont utilisés)
Et puis l'utilisation serait beaucoup plus propre:
Il est possible également d'utiliser le jdk est Optionnel classe
OriginalL'auteur aviad
C'est Java 101 en fait: vérifier
null
et initialisation de la requête au lieu de concaténer des prédicats. Ainsi, une méthode d'aide comme celle-ci pourrait faire l'affaire:Ensuite, vous pouvez tout simplement faire:
Remarque, que j'utilise
createOrAnd(…)
même dans le premier alinéa simplement pour des raisons de cohérence et de ne pas avoir à adapter ce code dans le cas où vous décidez d'ajouter un nouvel alinéa avant même l'un pourfirstName
.OriginalL'auteur Oliver Drotbohm
J'ai fait face à un même problème et voici une autre version de Timo Westkämper
's accepté de répondre à à l'aide de la
Optional
.OriginalL'auteur Jin Kwon
Base sur ce que je voudrais faire cela
Tout d'abord vous devez retourner un
List
deEmployeeEntity
. La seconde, de son mieux pour l'utiliser en option que de vérifier si sonnull
, et vous pouvez passer de Java 8Optional
valeurs obtenues à partir facultatifRequestParam
comme ceci:Et une chose très importante est l'utilisation de la
containsIgnoreCase
fonction dans le prédicat: "mieux qu'unlike
cause de ses insensible à la casse.À mon avis, on devrait utiliser une approche comme ceci:
regarder ici.
OriginalL'auteur EliuX
si vous cochez la QueryDSL mise en œuvre de
null
:qui est censé être ce que vous voulez.
OriginalL'auteur ameen
C'est un moyen très simple de traiter avec des paramètres optionnels, je l'utilise dans mon projet :
OriginalL'auteur MK-rou