Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 16672|Antwort: 0

[Quelle] Die detaillierte Verwendung von createCriteria ist die QBC-Abfrage in Hibernate

[Link kopieren]
Veröffentlicht am 09.08.2017 14:26:13 | | |

Nehmen wir nun an, es gibt eine Studentenklasse mit ID-, Name- und Altersattributen
String hql = "von Student s";
Wie früher tun wir es auch meistens
Abfrage = session.createQuery(hql);
Oder wenn du nach den Bedingungen suchen möchtest.
String hql = "von Student s, wo s.name wie 'King%'"
Abfrage = session.createQuery(hql);
Wenn Sie QBC statt HQL verwenden, lautet der Code:
Kriterien =session.createCriteria(Student.class);
Kriterium = Expression.like("name","king%");
So kann ich es mir nicht vorstellen. Dann addieren wir die Suchbedingung auf das Alter von 22 Jahren.
HQL:
Saite hql = "aus Student s, wobei s.name wie 'Wang%' und s.age = 22 ";
Abfrage = session.createQuery(hql);
List List = query.list();
QBC:
Kriterien =session.createCriteria(Student.class);
Kriterium Kriterium1 = Ausdruck.wie("name","king%");
Kriterium Kriterium2 = Expression.eq("age",newInteger(22));
criteria.add(kriterium1).add(criterion2);
Liste = criteria.list();


Es sieht viel umständlicher aus. Aber jeder, der ein Projekt gemacht hat, weiß, dass wenn sich die Geschäftslogik eines Moduls ändert, es oft SQL neu schreiben muss, und das Nervigste und Nervigste ist, das HQL oder SQL von jemand anderem zu übernehmen.
Wenn du QBC verwendest, erhöht das die Lesbarkeit und Wartbarkeit des Codes erheblich.
Es ist wichtig zu beachten, dass der Nullwert der Wert ist
Wenn wir zum Beispiel ein Student-Objekt mit einem Nullnamen finden wollen, sollten wir es so schreiben
Kriterien =session.createCriteria(Student.class);
Kriterium = Expression.isNull("name");
criteria.add(criterion).list();
und benutzt zwischen... und Zeit
Kriterien =session.createCriteria(Student.class);
Kriterium Kriterium1 = Expression.ge("Alter", neue Ganzzahl(20)); Untere Grenze
Kriterium Kriterium2 = Ausdruck.le("alter",neue Ganzzahl(25)); Decke
//这里也可以把上述两个条件添加到第三个条件里
Kriterium Kriterium3 =Ausdruck.und(Kriterium1,Kriterium2);
criteria.add(criterion3).list();
Entspricht von Schülern im Alter zwischen 20 und 25
Äquivalent zu from Student s, wobei s.age >= 20 und s.age <=25


Im Folgenden ist ein Vergleich der häufig verwendeten Abfragebedingungen von HQL und QBC aufgeführt
Ausdruck, der HQL QBC bedeutet
größer als oder gleich > = Expression.ge()
Größer als > Expression.gt()
Weniger als oder gleich < = Expression.le()
Weniger als < Expression.lt()
gleich = Expression.eq()
ist nicht gleich <>oder!= Expression.ne()

Null ist null Expression.isNull()
is notnull Expression.isNotNull()
Innerhalb des angegebenen Bereichs zwischen und Expression.between()
Nicht im angegebenen Bereich, nicht zwischen und Expression.not(Expression.between())
Gehört zu einer Sammlung in Expression.in()
Nicht Teil einer Sammlung notin Expression.not(Expression.in())
und Ausdruck. und()
oder Expression.or()
Not Expression.not()
Fuzzy Query wie Expression.like



1. Erstellen Sie eine Kriterien-Instanz net.sf.hibernate.Criteria Diese Schnittstelle stellt eine Abfrage für eine bestimmte Persistenzklasse dar. Session ist die Fabrik, die zur Herstellung der Kriterieninstanz verwendet wird.



Kriterium krit = sess.createCriteria(Cat.class);


crit.setMaxResults(50);


List Cats = crit.list();


2. Verengen Sie den Anwendungsbereich der Ergebnismenge Eine Abfragebedingung (Criterion) ist eine Instanz der net.sf.hibernate.expression.Criterion-Schnittstelle. Die Klasse net.sf.hibernate.expression.Expression definiert, um einige eingebaute Kriteriumstypen zu erhalten.


Liste Katzen = sess.createCriteria(Cat.class)


                .add( Expression.like("name", "Fritz%") )


                .add( Expression.between("weight", minWeight, maxWeight))


                .list();
Ausdrücke können logisch gruppiert werden.

Liste Katzen = sess.createCriteria(Cat.class)



                .add( Expression.like("name", "Fritz%") )


                .add( Expression.or( Expression.eq( "age", new Integer(0) ), Expression.isNull("age")))


                .list();


Liste Katzen = sess.createCriteria(Cat.class)


                .add( Expression.in( "name",new String[]{"Fritz","Izi","Pk"}))


                .add( Expression.disjunktion()


                .add( Expression.isNull("age") )


                .add( Expression.eq("age", neue Integer(0) ) )


                .add( Expression.eq("age", neue Integer(1) ) )


                .add( Expression.eq("age", neue Integer(2) ) ) )


                 .list();
Es gibt viele vorgefertigte Konditionstypen (Unterklassen von Ausdrücken). Es gibt eine besonders nützliche Methode, die es ermöglicht, SQL direkt einzubetten.

Liste Katzen = sess.createCriteria(Cat.class)



                .add( Expression.sql("lower($alias.name) like lower(?)", "Fritz%", Hibernate.STRING))


                .list();  
wobei {alias} ein Platzhalter ist, wird er durch das Zeilenalias der abgerufenen Entität ersetzt. (Original: Der {alias}-Platzhalter wird durch den Zeilenalias der abgefragten Entität ersetzt.)


3. Sortiere die Ergebnisse Du kannst net.sf.hibernate.expression.Order verwenden, um die Ergebnismenge zu sortieren.


Liste Katzen = sess.createCriteria(Cat.class)



                .add( Expression.like("name", "F%")


                .addOrder( Order.asc("name"))


                .addOrder( Order.desc("age"))


                .setMaxResults(50)


                .list();


4. Assoziationen Du kannst createCriteria() zwischen Assoziationen verwenden, um einfach Einschränkungen zwischen Entitäten mit Beziehungen zu spezifizieren.

Liste Katzen = sess.createCriteria(Cat.class)



                 .add( Expression.like("name", "F%")


                 .createCriteria("kittens")


                 .add( Expression.like("name","F%")


                 .list();


Beachten Sie, dass die zweite createCriteria() eine neue Instanz von Criteria zurückgibt, die auf ein Element der Kittens-Sammlungsklasse verweist. Die folgenden alternativen Formen sind in bestimmten Situationen nützlich.


Liste Katzen = sess.createCriteria(Cat.class)


                .createAlias("kittens", "kt")


                .createAlias("mate", "mt")


                .add(Expression.eqProperty("kt.name", "mt.name"))


                .list();


(createAlias()) erzeugt keine neue Instanz der Kriterien. Beachten Sie, dass die Kittens-Sammlungsklasse, die in den beiden vorherigen Abfragen von der Cat-Instanz gehalten wurde, nicht durch Kriterien vorgefiltert ist! Wenn Sie nur Kätzchen zurückgeben möchten, die die Kriterien erfüllen, müssen Sie returnMaps() verwenden.


Liste Katzen = sess.createCriteria(Cat.class)


.createCriteria("kittens", "kt")


.add( Expression.eq("name", "F%") )


.returnMaps()


.list();


Iterator iter = cats.iterator();


während ( iter.hasNext())


{  


Map map = (Map) iter.next();


Katze, Katze = (Katze) map.get(Criteria.ROOT_ALIAS);


Katzenkätzchen = (Katze) map.get("kt");


}


5. Dynamisches Assoziations-Fetching Sie können die automatische Abrufrichtlinie von Assoziationsobjekten ändern, indem Sie FetchMode() zur Laufzeit setzen.



Liste Katzen = sess.createCriteria(Cat.class)


                .add( Expression.like("name", "Fritz%") )


                .setFetchMode("mate", FetchMode.EAGER)


                .list();


Diese Abfrage bewirkt sowohl Partner als auch Kätzchen über die äußere Verbindung.


6. Laut der Example Queries net.sf.hibernate.expression.Example-Klasse können Sie Anfragebedingungen aus der angegebenen Instanz erstellen.


Katze = neue Katze();


cat.setSex('F');


cat.setFarbe(Farbe.SCHWARZ);


Listenergebnisse = session.createCriteria(Cat.class)


                    .add( Example.create(cat) )


                    .list();
Versionseigenschaften, Darstellungseigenschaften und Assoziationen werden alle ignoriert. Standardmäßig sind auch Nullattribute ausgeschlossen. Du kannst anpassen, wie das Beispiel angewendet wird. Sie können
um anzupassen, wie das Beispiel angewendet wird. Beispiel = Example.create(cat) .exludeZeroes() //exclude nullwertige Eigenschaften aus


.excludeProperty("color") //exclude die Eigenschaft namens "color" .ignoreCase() //führen String-Vergleiche ohne Großfach aus


.enableLike(); Verwendung wie für Saitenvergleiche


Listenergebnisse = session.createCriteria(Cat.class)


                      .add(example)


                      .list();
Sie können sogar Beispiele verwenden, um Kriterien für zugehörige Objekte festzulegen. Listenergebnisse = session.createCriteria(Cat.class) .add(Example.create(cat) )


.createCriteria("mate"), .add(Example.create(cat.getMate())) .list();


Der Referenzcode lautet wie folgt:






Vorhergehend:LINQ links, rechts und innere Verbindungen
Nächster:Die Differenz zwischen let- und var-Definitionsvariablen in js
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com