


Développement backend Java : requête dynamique à l'aide de l'API de critères JPA
Dans le développement back-end Java, l'interrogation de données est une opération très courante, et l'utilisation de JPA (Java Persistence API) est une méthode très populaire. JPA offre un moyen flexible et réutilisable de récupérer et de manipuler des données dans une base de données. Cependant, pour les requêtes dynamiques (c'est-à-dire que la requête doit être ajustée en fonction de différents paramètres), il peut ne pas être pratique d'utiliser des instructions de requête statiques traditionnelles ou JPQL (Java Persistence Query Language). Dans ce cas, l’utilisation de l’API JPA Criteria peut être plus pratique et plus flexible.
JPA Criteria API est une méthode de requête orientée objet, qui est implémentée en assemblant des conditions de requête et en renvoyant les résultats via du code. Par rapport aux instructions de requête statiques traditionnelles ou JPQL, l'un de ses principaux avantages est qu'il peut regrouper dynamiquement différentes conditions de requête au cours du processus de requête et mieux répondre aux modifications du modèle de données. Cet article explique comment utiliser l'API JPA Criteria pour effectuer des requêtes dynamiques.
- Entity Class
Tout d'abord, nous devons avoir une classe d'entité Supposons que nous ayons une classe d'entité User, qui a un identifiant, nom, âge, sexe et autres champs. Avant d'utiliser l'API JPA Criteria, nous devons d'abord définir cette classe d'entité.
@Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Integer age; private Boolean gender; // 省略getter和setter方法 }
- CriteriaBuilder
Avant d'utiliser l'API JPA Criteria, nous devons d'abord obtenir CriteriaBuilder. CriteriaBuilder est une classe d'usine utilisée pour créer divers CriteriaQuery, Predicate et Expression. Habituellement, nous pouvons obtenir CriteriaBuilder via EntityManager.
@PersistenceContext private EntityManager entityManager; public List<User> getUsers() { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); // ... 继续后续操作 }
- CriteriaQuery
CriteriaQuery est utilisé pour les opérations de requête Nous pouvons l'utiliser pour définir les conditions de la requête et le type de résultats renvoyés. . Lors de la définition des conditions de requête, nous pouvons définir plusieurs restrictions via Predicate est un petit outil de l'API Criteria pour créer des conditions de requête.
public List<User> getUsers(String name, Integer age, Boolean gender) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<User> cq = cb.createQuery(User.class); Root<User> root = cq.from(User.class); List<Predicate> predicates = new ArrayList<>(); if (name != null) { Predicate namePredicate = cb.equal(root.get("name"), name); predicates.add(namePredicate); } if (age != null) { Predicate agePredicate = cb.greaterThanOrEqualTo(root.get("age"), age); predicates.add(agePredicate); } if (gender != null) { Predicate genderPredicate = cb.equal(root.get("gender"), gender); predicates.add(genderPredicate); } cq.where(predicates.toArray(new Predicate[0])); return entityManager.createQuery(cq).getResultList(); }
Le code ci-dessus montre comment utiliser CriteriaBuilder pour créer CriteriaQuery. Tout d’abord, nous utilisons EntityManager pour obtenir le CriteriaBuilder. Ensuite, nous créons un objet de requête CriteriaQuery
- Expression
L'expression est un autre concept utile dans l'API Criteria. Elle représente une expression d'opération qui peut être utilisée pour calculer et comparer des éléments complexes. types de données. Lors de l'utilisation d'Expression, nous pouvons effectuer un filtrage plus raffiné dans les conditions de requête d'origine. Par exemple, nous pouvons utiliser la méthode between pour interroger les utilisateurs dont l’âge se situe dans une certaine plage.
public List<User> getUsersInRange(Integer minAge, Integer maxAge) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<User> cq = cb.createQuery(User.class); Root<User> root = cq.from(User.class); Expression<Integer> ageExpression = root.get("age"); Predicate agePredicate = cb.between(ageExpression, minAge, maxAge); cq.where(agePredicate); return entityManager.createQuery(cq).getResultList(); }
Le code ci-dessus interroge les utilisateurs dont l'âge est compris entre minAge et maxAge. Il convient de noter que nous utilisons ici Expression
- Requête de plusieurs tables
Dans certains scénarios, nous devons interroger plusieurs tables. À ce stade, nous devons utiliser Join, qui est le concept de base utilisé pour les requêtes multi-tables. Supposons que nous ayons une classe d'entité Task, qui comporte deux champs, id et userId, qui est associé au champ id dans la classe d'entité User.
@Entity @Table(name = "task") public class Task { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long userId; // 省略getter和setter方法 }
Nous pouvons associer deux classes d'entités via Join et interroger toutes les tâches sous un utilisateur spécifié.
public List<Task> getUserTasks(Long userId) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Task> cq = cb.createQuery(Task.class); Root<Task> taskRoot = cq.from(Task.class); Join<Task, User> userJoin = taskRoot.join("user"); Predicate predicate = cb.equal(userJoin.get("id"), userId); cq.where(predicate); return entityManager.createQuery(cq).getResultList(); }
- Requête de pagination
Enfin, nous présentons comment implémenter une requête de pagination dans l'API JPA Criteria. Par rapport aux requêtes statiques, les requêtes de pagination sont également très courantes et sont particulièrement importantes pour les scénarios comportant des quantités de données relativement importantes. Dans l'API JPA Criteria, nous pouvons utiliser les méthodes setFirstResult et setMaxResults pour spécifier la position de départ de la requête et le nombre maximum de résultats renvoyés.
public List<User> getUsers(Integer pageNum, Integer pageSize) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<User> cq = cb.createQuery(User.class); Root<User> root = cq.from(User.class); int offset = (pageNum - 1) * pageSize; entityManager.createQuery(cq).setFirstResult(offset).setMaxResults(pageSize); return entityManager.createQuery(cq).getResultList(); }
Le code ci-dessus montre comment définir les conditions de requête de pagination. Tout d'abord, nous calculons le décalage via pageNum et pageSize, définissons la position de départ, puis définissons le nombre maximum de résultats renvoyés via setMaxResults. Bien entendu, dans des applications pratiques, nous pouvons également effectuer des requêtes de pagination par d’autres moyens.
Conclusion
JPA Criteria API est un outil très flexible et puissant qui peut fournir un bon support dans les requêtes dynamiques. Bien sûr, dans les applications réelles, nous devons également prendre en compte les performances et d’autres problèmes, mais cela peut rendre notre code plus lisible, maintenable et évolutif. J'espère que cet article sera utile aux lecteurs qui utilisent JPA ou envisagent d'utiliser JPA.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Il existe cinq directions d'emploi dans l'industrie Java, laquelle vous convient le mieux ? Java, en tant que langage de programmation largement utilisé dans le domaine du développement de logiciels, a toujours été populaire. En raison de sa forte nature multiplateforme et de son cadre de développement riche, les développeurs Java disposent d'un large éventail d'opportunités d'emploi dans divers secteurs. Dans l'industrie Java, il existe cinq principales directions d'emploi, à savoir le développement JavaWeb, le développement d'applications mobiles, le développement de Big Data, le développement intégré et le développement du cloud computing. Chaque direction a ses caractéristiques et ses avantages. Les cinq directions seront discutées ci-dessous.

La programmation réactive devient de plus en plus importante dans le développement Web actuel. AkkaHTTP est un framework HTTP hautes performances basé sur Akka, adapté à la création d'API réactives de style REST. Cet article expliquera comment utiliser AkkaHTTP pour créer une API réactive, tout en fournissant quelques exemples pratiques. Commençons ! Pourquoi choisir AkkaHTTP Lors du développement d'API réactives, il est important de choisir le bon framework. AkkaHTTP est un très bon choix car

Comment résoudre les problèmes de transaction de base de données dans le développement de fonctions back-end Java ? Dans le développement de fonctions back-end Java, les fonctions impliquant des opérations de base de données sont très courantes. Dans les opérations de base de données, les transactions sont un concept très important. Une transaction est une unité logique constituée d'une séquence d'opérations de base de données qui est soit entièrement exécutée, soit pas exécutée du tout. Dans les applications pratiques, nous devons souvent nous assurer qu'un ensemble d'opérations de base de données associées sont toutes exécutées avec succès ou toutes annulées pour maintenir la cohérence et la fiabilité des données. Alors, comment développer dans le backend Java

Comment gérer les requêtes inter-domaines dans le développement de fonctions backend Java ? Dans un modèle de développement où le front-end et le back-end sont séparés, il est très courant que le front-end envoie des requêtes à l'interface API back-end pour obtenir des données via JavaScript. Cependant, en raison de la politique de même origine du navigateur, il existe des restrictions sur les requêtes inter-domaines. La requête inter-domaines signifie que la page frontale demande des serveurs avec différents noms de domaine, différents ports ou différents protocoles via AJAX et d'autres méthodes. Cet article présentera une méthode courante de gestion des requêtes inter-domaines dans le développement de fonctions back-end Java, avec des exemples de code. Résoudre plusieurs domaines

Avec le développement continu de la technologie Internet, le développement et la conception d’API RESTful sont devenus une tâche vitale. L'API RESTful fournit un mécanisme simple, léger, flexible et fiable pour l'interaction entre différents services. Dans le même temps, la création d’API RESTful sécurisées devient de plus en plus importante. Dans cet article, nous explorerons comment créer une API RESTful sécurisée dans le développement backend Java. 1. Comprendre RESTfulAPI RESTfulAPI est un

Comment implémenter la persistance des données dans le développement de fonctions back-end Java ? Avec le développement rapide d’Internet, les données sont devenues un atout essentiel qui ne peut être ignoré par les organisations et les entreprises. Dans le développement back-end Java, assurer la persistance des données est une tâche importante. Cet article présentera plusieurs méthodes courantes de persistance des données et utilisera des exemples de code pour montrer comment implémenter la persistance des données en Java. 1. Base de données relationnelle La base de données relationnelle est l'une des méthodes de persistance des données les plus courantes. En Java, nous pouvons utiliser JDBC (JavaDa

Comment implémenter la fonction de recherche dans le développement de fonctions backend Java ? La fonctionnalité de recherche est une fonctionnalité essentielle dans les applications modernes. Qu'il s'agisse de rechercher des produits sur des plateformes de commerce électronique ou de rechercher des amis sur les réseaux sociaux, la fonction de recherche offre aux utilisateurs un moyen pratique et efficace d'obtenir des informations. Dans le développement backend Java, nous pouvons utiliser diverses technologies et bibliothèques pour implémenter des fonctions de recherche. Cet article présentera une méthode couramment utilisée pour implémenter la fonction de recherche et donnera des exemples de code utilisant le langage Java comme exemple. Dans le développement backend Java, nous avons généralement

Comment gérer les exceptions dans le développement de fonctions backend Java ? Dans le développement backend Java, la gestion des situations d'exception est une tâche très importante. Des exceptions peuvent se produire au moment de l'exécution, telles que des exceptions de pointeur nul, des exceptions de tableau hors limites, etc., ou il peut s'agir d'exceptions dans la logique métier, telles qu'une ressource introuvable, des autorisations insuffisantes, etc. Une gestion appropriée de ces exceptions peut non seulement améliorer la stabilité et la fiabilité du code, mais également améliorer la maintenabilité et la lisibilité du code. Cet article expliquera comment gérer raisonnablement les situations anormales dans le développement back-end Java et donnera les codes correspondants.
