Il y a une syntaxe de requête HQL dans Hibernate. Mais ce que nous connaissons davantage, c'est compter les instructions SQL. Alors, comment devrions-nous faire du support Hibernate SQL? Nous n'avons pas besoin de considérer cela, l'équipe Hibernate l'a déjà fait.
Ne parlons pas de bêtises, prenons un exemple.
Sélectionner * dans T_User USR
Ce qui précède est une déclaration SQL, et c'est un non-sens, que tout le monde connaît. Que devons-nous faire si Hibernate veut exécuter cette déclaration? Regardez le code:
Query query = session.cretesqlQuery ("select * from t_user usr"); Voilà, tout le monde devrait savoir ce qui reste et ce qui se passe les demandes est normal.
Alors qu'est-ce qui est retourné après la requête?
while (iter.hasnext ()) {objet [] objs = (objet []) iter.next (); for (int i = 0; i <objs.length; i ++) {System.out.print (objs [i]); } System.out.println (); } Chaque résultat renvoyé est un tableau d'objet [].
À cette époque, quelqu'un est sorti et a dit qu'il avait été orienté objet. Oui, il est orienté objet, hélas, il n'y a aucun moyen.
Continuons à regarder:
Sélectionnez {Usr. *} FROM T_USER USR En voyant cela, je suppose que certaines chaussures pour enfants commencent à bouger. Qu'est-ce que les accolades?
Ne vous inquiétez pas, prenez votre temps. Continuons d'abord à lire le code.
La copie de code est la suivante:
Query query = session.cretesqlQuery ("select {usr. *} From t_user usr"). Addentity (tuser.class);
AddentitySqlQuery Addentity (String Tablealias, Class EntityType) Déclarez une entité "racine": Tablealias - la table SQL AliasentityType - le type java de l'entité à ajouter sous forme de racine
C'est la même chose que c'est un léger sucer. Vous ne pouvez l'utiliser que vous-même.
Le premier paramètre fait référence à l'alias du tableau. Tout comme l'instruction ci-dessus, l'alias de notre table est USR, donc le premier paramètre est USR, et le second se réfère à quelle classe les résultats de la requête doivent être mappés. Ici, puisque nous mlons à la table T_User via TUSER dans le fichier de mappage, nous sommes bien sûr TUSER ici. Ensuite, après vérification, il y a des instructions SQL et le résultat est de type tuser.
Les résultats que nous avons trouvés sont:
org.hibernate.tutorial.domain6.suser@198cb3d
Bien sûr, le vôtre doit être différent du mien. Ne déplacez pas le poulet.
Peut-être que nous n'avons pas besoin de tout savoir, pour le moment, tout ce dont nous avons besoin est de définir l'alias:
Sélectionnez U.Id comme {usr.id}, U.Name comme {usr.name}, u.age as {usr.age} de t_user u Nous voyons que nous avons utilisé pour spécifier l'alias pour le champ, et il en va de même dans le programme:
La copie de code est la suivante:
Query query = session.cretesqlQuery ("select u.id as {usr.id}, u.Name as {usr.name}, u.age as {usr.age} de t_user u"). Addentity ("usr", tuser.class);
<sql-query name = "querytuser"> <return alias = "usr" entity-name = "org.hibernate.tutorial.domain6.tuser" /> select {usr. *} from t_user usr where name =: name </ sql -query> Notez que le nom d'entité ici doit être écrit avec le nom complet du package, sinon une erreur sera signalée. Ici, nous avons le Retour des sous-titres, qui spécifie l'alias et le nom de classe de la table, afin que nous n'ayons pas besoin d'ajoute au moment de l'exécution.
Regardez le code:
Query Query = Session.GetNameDquery ("QueryTuser"); query.setParameter ("name", "shun"); List list = query.list (); Iterator iter = list.iterator ();
Nous allons bien comme ça. Notez que nous n'avons pas ajouté d'addition, principalement en raison de la configuration dans le fichier de configuration.
Notez que si vous êtes configuré dans le fichier de configuration, vous devez avoir le sous-tag de retour pour spécifier l'alias de table et le nom de classe. Cela évite principalement les jugements répétés lors de la lecture des déclarations.
Après en parler depuis si longtemps, nous parlons de tables avec un alias. Alors, que devons-nous faire si notre table n'a pas d'alias mais que nous voulons résumer le résultat dans l'objet?
Sélectionner * dans T_User USR
C'est très simple. Appelez simplement l'addentité de méthode surchargée d'Addentity (Class Clazz) et vous n'avez qu'à fournir un nom de classe, sans l'alias de table.
Bien sûr, Hibernate prend également en charge les procédures stockées. Il vous suffit de définir la propriété callable de SQL-Query sur true dans le fichier de configuration pour indiquer que les procédures stockées actuellement appelées. Comme je n'ai pas beaucoup de contact avec les procédures stockées, je les étudierai davantage à l'avenir, puis les étudierai avec vous.
Lorsque nous appelons les méthodes d'opérations de données correspondantes telles que Session.save, elle sera convertie en instruction SQL intégrée d'Hibernate, mais que se passe-t-il si nous voulons contrôler le format de l'instruction SQL nous-mêmes?
Hibernate y a aussi pensé.
Nous l'ajoutons directement au fichier de mappage:
<SQL-INSERT> INSERT INTO T_USER (NOM, AGE) VALEURS (? ,?) </ SQL-INSERT> <SQL-UpDate> Update User Set User_Name =?, Age =? Où user_id =? </ sql-update>
Notez que cela doit être ajouté dans la balise de classe en tant que sous-titre. Nous sommes tous des lettres majuscules ici, pour les distinguer des instructions par défaut d'Hibernate et n'avons pas d'autre sens.
Regardons d'abord l'appel pour insérer:
Utilisateur utilisateur = nouveau utilisateur (); user.setName ("shun123123"); user.setage (23); Lorsque nous appelons Save, l'instruction Hibernate est:
Hiberner:
Insérer dans les valeurs utilisateur (user_name, âge) (? ,?)
Il appelle les instructions de la balise SQL-insert que nous avons configurée, jetons un coup d'œil à l'appel à mettre à jour:
User user = (user) session.get (user.class, new long (29)); user.setName ("shun123123"); user.setage (23); session.save (utilisateur); Nous appelons Save, il appellera automatiquement la mise à jour, et l'instruction à l'heure actuelle est:
Hiberner:
Mettre à jour le set utilisateur user_name =?, Âge =? Où user_id =?Nous voyons que l'instruction de sortie est capitalisée, ce qui signifie que l'instruction que nous avons configurée est appelée.