Connaissances liées aux requêtes Hibernate Heure : 04/10/2009 07:14:25 Source : Internet Auteur : Inconnu Clics : 146 fois Présentez d'abord la différence entre les méthodes get() et load() :
La différence entre la méthode get() et la méthode load() réside principalement dans l'utilisation du cache de deuxième niveau.
La méthode load() utilisera le cache de deuxième niveau, et la méthode get() interrogera directement la base de données si elle n'est pas trouvée dans le cache de premier niveau, et ne recherchera pas dans le cache de deuxième niveau.
get() : Si vous introduisez d’abord la différence entre les méthodes get() et load() dans la base de données :
La différence entre la méthode get() et la méthode load() réside principalement dans l'utilisation du cache de deuxième niveau.
La méthode load() utilisera le cache de deuxième niveau, et la méthode get() interrogera directement la base de données si elle n'est pas trouvée dans le cache de premier niveau, et ne recherchera pas dans le cache de deuxième niveau.
get() : S'il n'y a aucun enregistrement dans la base de données, il renverra null get() renverra quand même les données.
load() : S'il n'y a aucun enregistrement dans la base de données, une exception sera levée. S'il y a des données, un objet proxy sera renvoyé.
Différence entre les méthodes list et iterator() : (N+1 ?)
Lorsque la méthode list() est exécutée, elle exécute directement les instructions de requête requises pour les résultats de la requête.
La méthode iterator() exécute d'abord la requête pour obtenir l'ID de l'objet, puis obtient l'objet à interroger en fonction de chaque valeur d'ID.
Par conséquent : pour les requêtes utilisant la méthode list(), une seule instruction SQL est généralement exécutée, tandis que pour les requêtes utilisant la méthode iterator(), N+1 instructions SQL peuvent devoir être exécutées (N est le nombre d'enregistrements dans le jeu de résultats). ).
Les ensembles de résultats sont traités différemment :
La méthode list() activera tous les objets du jeu de résultats à la fois et initialisera tous les objets du jeu de résultats en fonction des résultats de la requête. Si le jeu de résultats est très volumineux, il occupera beaucoup de mémoire et provoquera même un débordement de mémoire.
La méthode iterator() n'initialise pas tous les objets en même temps pendant l'exécution, mais initialise les objets en fonction de l'accès au jeu de résultats. Vous pouvez contrôler le nombre d'objets dans le cache lors d'un accès pour éviter d'utiliser trop de cache et de provoquer un débordement de mémoire.
HQL : HQL est un langage de requête orienté objet. Les objets opérationnels de HQL sont des classes, des instances, des attributs, etc.
SQL : les objets d'opération de SQL sont des objets de données tels que des tables et des colonnes de données.
Hql est un langage de requête entièrement orienté objet, il peut donc prendre en charge des fonctionnalités telles que l'héritage et plusieurs éléments.
La requête HQL repose sur la classe Query et chaque instance de Query correspond à un objet de requête.
Fonction de définition des paramètres, l'interface de requête est la véritable interface de requête HQL.
//Créer un objet Requête
Requête de requête = session.createQuery ("du client comme c où c.name=:customerName et c.age=:customerAge");
//Paramètres de liaison dynamique
query.setString("customerName","Tom");
query.setInteger("customerAge",21);
//Exécute l'instruction de requête et renvoie les résultats
Résultat de la liste = query.list();
Étapes de requête HQL :
1 : Obtenez l’objet Hibernate Session.
2 : Écrivez des instructions HQL.
3 : Utilisez l'instruction HQL comme paramètre pour appeler la méthode createQuery de Session afin de créer un objet de requête.
4 : Si l'instruction HQL contient des paramètres, appelez la méthode setXXX() de Query pour attribuer des valeurs aux paramètres.
5 : Appelez la liste et d’autres méthodes de l’objet Query pour parcourir les résultats de la requête.
La requête contient également deux méthodes :
setFirstResult(int firstResult) : définit l'enregistrement à partir duquel commence l'ensemble de résultats renvoyé.
setMaxResults(int maxResults) : définissez le nombre de résultats renvoyés par cette requête.
Suppression et mise à jour de l'entité.
Requête de projection : interroge uniquement une partie de l'attribut.
L'interrogation d'un attribut renvoie une chaîne
L'interrogation de deux champs renvoie un tableau
Requête construite dynamiquement : principalement utilisée pour des dizaines de requêtes de table ;
Pour construire un nouvel objet, ajoutez un constructeur ;
Lors de la création d'un nouvel objet, ajoutez le nom du package
N'utilisez pas count(*), utilisez count(objet persistant)
Regroupement et tri :
La clause Order by peut être triée par mots-clés asc ou desc
Par exemple : form User u Order by u.name asc,u.age desc;
Regrouper par clause et requête statistique :
Par exemple : String hql = "select count(u),u.age from User u group by u.age ayant count(u)>10" ;
Liste liste = session.createQuery(hql).list();
Les fonctions d'agrégation SQL standard peuvent être utilisées dans les instructions HQL, telles que : count(), sum(), max(), min(), age(), etc.
Requête de connexion :
Jointure interne : jointure interne
Jointure externe gauche : jointure externe gauche
Jointure externe droite :jointure externe droite
Jointure complète : jointure complète (pas couramment utilisée)
Jointure externe urgente : récupération de la jointure externe gauche, jointure gauche
fetch : utilisé pour obtenir les données de connexion en une seule fois, notamment les données de collecte. Réduisez le nombre d’interactions avec la base de données.
jointure exclue : utilisez une jointure externe pour effectuer une jointure externe. Tous les enregistrements de la table de gauche et les informations d'enregistrement correspondantes de la classe de commande seront affichées.
jointure à droite : juste à l'opposé de la jointure à gauche, la jointure à droite renvoie tous les enregistrements de la table de droite de HQL et les informations d'enregistrement de l'objet client correspondant.
Quatre façons d’obtenir des données de collecte :
1:Hibernate.initialize(user.getOrder());
2:user.getOrder().size();
3 : Connexion urgente gauche et droite
4 : Filtres avancés
Requêtes de critères : utilisez des objets pour effectuer des requêtes d'objets.
Les principales interfaces sont : les classes Criteria, Criterion, expression_r et Restrictions. Possibilité de prendre en charge la génération dynamique d'instructions SQL au moment de l'exécution.
Étapes de requête conditionnelle :
1 : Créez un objet Criteria via la méthode CreateCriteria() de seesion
2 : définissez l'objet de requête, le nom fait référence à l'attribut de l'objet
3 : Ajouter des conditions de requête à l'objet Critères
4 : Exécutez la requête list() pour renvoyer les résultats.
La requête conditionnelle est complétée par trois classes :
Critères : représente une requête.
Critère : représente une condition de requête.
Restrictions : Classe d'outils pour générer des conditions de requête.
Cet article provient du blog CSDN Veuillez indiquer la source lors de la réimpression : http://blog.csdn.net/jzaccp_xiaoxiong/archive/2009/12/31/5111135.aspx.