Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 16672|Απάντηση: 0

[Πηγή] Η λεπτομερής χρήση του createCriteria είναι το ερώτημα QBC στην Αδρανοποίηση

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 9/8/2017 2:26:13 μ.μ. | | |

Τώρα ας υποθέσουμε ότι υπάρχει μια τάξη μαθητών με ταυτότητα, όνομα, χαρακτηριστικά ηλικίας
Συμβολοσειρά hql = "από το Student s";
Όπως κάναμε παλιά, συνήθως το κάνουμε
Ερώτημα ερωτήματος = session.createQuery(hql);
Ή αν θέλετε να κάνετε αναζήτηση σύμφωνα με τις συνθήκες.
Συμβολοσειρά hql = "από το Student s όπου s.name όπως "King%""
Ερώτημα ερωτήματος = session.createQuery(hql);
Εάν χρησιμοποιείτε QBC αντί για HQL, τότε ο κωδικός είναι:
Κριτήρια κριτήρια =session.createCriteria(Student.class);
Κριτήριο κριτηρίου = Έκφραση.like("όνομα","king%");
Δεν μπορώ να το δω έτσι. Στη συνέχεια προσθέτουμε τη συνθήκη αναζήτησης στην ηλικία των 22 ετών.
HQL:
Συμβολοσειρά hql = "από το Student s όπου s.name όπως 'Wang%' και s.age= 22 ";
Ερώτημα ερωτήματος = session.createQuery(hql);
Λίστα λίστας = query.list();
QBC:
Κριτήρια κριτήρια =session.createCriteria(Student.class);
Κριτήριο κριτηρίου1 = Έκφραση.like("όνομα","king%");
Κριτήριο κριτηρίου2 = Expression.eq("age",newInteger(22));
criteria.add(κριτήριο1).add(κριτήριο2);
Λίστα λίστας = criteria.list();


Φαίνεται πολύ πιο δυσκίνητο. Αλλά όποιος έχει κάνει ένα έργο γνωρίζει ότι όταν αλλάζει η επιχειρηματική λογική μιας ενότητας, συχνά πρέπει να ξαναγράψει την SQL και το πιο ενοχλητικό και ενοχλητικό πράγμα είναι να πάρει την HQL ή την SQL κάποιου άλλου.
Εάν χρησιμοποιείτε QBC, αυξάνει σημαντικά την αναγνωσιμότητα και τη συντηρησιμότητα του κώδικα.
Είναι σημαντικό να σημειωθεί ότι η μηδενική τιμή είναι η τιμή
Για παράδειγμα, όταν θέλουμε να βρούμε ένα αντικείμενο Student με μηδενικό όνομα, θα πρέπει να το γράψουμε ως εξής
Κριτήρια κριτήρια =session.createCriteria(Student.class);
Κριτήριο κριτηρίου = Expression.isNull("όνομα");
criteria.add(criterion).list();
και χρήση μεταξύ... και χρόνο
Κριτήρια κριτήρια =session.createCriteria(Student.class);
Κριτήριο κριτηρίου1 = Expression.ge("ηλικία",νέος ακέραιος(20)); Κατώτατο όριο
Κριτήριο κριτηρίου2 = Expression.le("age",νέος ακέραιος(25)); Οροφή
//这里也可以把上述两个条件添加到第三个条件里
Κριτήριο κριτηρίου3 =Έκφραση.και(κριτήριο1,κριτήριο2);
criteria.add(criterion3).list();
Ισοδύναμο με από μαθητές ηλικίας μεταξύ 20 και 25 ετών
Ισοδύναμο με από μαθητές όπου s.age >= 20 και s.age <=25


Ακολουθεί μια σύγκριση των κοινώς χρησιμοποιούμενων συνθηκών ερωτήματος των HQL και QBC
Έκφραση που σημαίνει HQL QBC
μεγαλύτερο ή ίσο με > = Expression.ge()
Μεγαλύτερο από > Expression.gt()
Μικρότερο ή ίσο με < = Expression.le()
Λιγότερο από < Expression.lt()
ισούται με = Expression.eq()
δεν ισούται με <>ή!= Expression.ne()

Το Null είναι null Expression.isNull()
is notnull Expression.isNotNull()
Εντός του καθορισμένου εύρους μεταξύκαι Expression.between()
Όχι στο καθορισμένο εύρος όχι μεταξύκαι Expression.not(Expression.between())
Ανήκει σε συλλογή στο Expression.in()
Δεν αποτελεί μέρος μιας συλλογής notin Expression.not(Expression.in())
και έκφραση.και()
ή Expression.or()
Όχι Έκφραση.not()
Ασαφές ερώτημα όπως το Expression.like



1. Δημιουργήστε μια παρουσία κριτηρίων net.sf.hibernate.Criteria Αυτή η διεπαφή αντιπροσωπεύει ένα ερώτημα για μια συγκεκριμένη κλάση persistence. Το Session είναι το εργοστάσιο που χρησιμοποιείται για την κατασκευή της παρουσίας Criteria.



Κριτήρια crit = sess.createCriteria(Cat.class);


crit.setMaxResults(50);


Λίστα γατών = crit.list();


2. Περιορίστε το εύρος του συνόλου αποτελεσμάτων Μια συνθήκη ερωτήματος (Κριτήριο) είναι μια παρουσία της διεπαφής net.sf.hibernate.expression.Criterion. Η κλάση net.sf.hibernate.expression.Expression ορίζει τη λήψη ορισμένων ενσωματωμένων τύπων κριτηρίων.


Λίστα cats = sess.createCriteria(Cat.class)


                .add( Έκφραση.like("όνομα", "Fritz%") )


                .add( Expression.between("βάρος", minWeight, maxWeight))


                .list();
Οι εκφράσεις μπορούν να ομαδοποιηθούν λογικά.

Λίστα cats = sess.createCriteria(Cat.class)



                .add( Έκφραση.like("όνομα", "Fritz%") )


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


                .list();


Λίστα cats = sess.createCriteria(Cat.class)


                .add( Expression.in( "όνομα",νέα συμβολοσειρά[]{"Fritz","Izi","Pk"}))


                .add( Έκφραση.disjunction()


                .add( Expression.isNull("ηλικία") )


                .add( Expression.eq("age", νέος ακέραιος(0) ) )


                .add( Expression.eq("age", νέος ακέραιος(1) ) )


                .add( Expression.eq("age", νέος ακέραιος αριθμός(2) ) ) )


                 .list();
Υπάρχουν πολλοί προκατασκευασμένοι τύποι συνθηκών (υποκλάσεις Εκφράσεων). Υπάρχει ένα ιδιαίτερα χρήσιμο που σας επιτρέπει να ενσωματώσετε απευθείας την SQL.

Λίστα cats = sess.createCriteria(Cat.class)



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


                .list();  
Όπου το {alias} είναι ένα σύμβολο κράτησης θέσης, θα αντικατασταθεί από το ψευδώνυμο γραμμής της οντότητας στην οποία υποβλήθηκε το ερώτημα. (Αρχικό: Το σύμβολο κράτησης θέσης {alias} θα αντικατασταθεί από το ψευδώνυμο γραμμής της οντότητας στην οποία υποβάλλεται το ερώτημα.)


3. Ταξινομήστε τα αποτελέσματα Μπορείτε να χρησιμοποιήσετε το net.sf.hibernate.expression.Order για να ταξινομήσετε το σύνολο αποτελεσμάτων.


Λίστα cats = sess.createCriteria(Cat.class)



                .add( Expression.like("όνομα", "F%")


                .addOrder( Order.asc("όνομα"))


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


                .setMaxResults(50)


                .list();


4. Συσχετίσεις: Μπορείτε να χρησιμοποιήσετε το createCriteria() μεταξύ συσχετίσεων για να καθορίσετε εύκολα περιορισμούς μεταξύ οντοτήτων με σχέσεις.

Λίστα cats = sess.createCriteria(Cat.class)



                 .add( Expression.like("όνομα", "F%")


                 .createCriteria("γατάκια")


                 .add( Έκφραση.like("όνομα","F%")


                 .list();


Σημειώστε ότι η δεύτερη createCriteria() επιστρέφει μια νέα παρουσία του Criteria, δείχνοντας ένα στοιχείο της κλάσης συλλογής γατών. Οι ακόλουθες εναλλακτικές φόρμες είναι χρήσιμες σε συγκεκριμένες περιπτώσεις.


Λίστα cats = sess.createCriteria(Cat.class)


                .createAlias("γατάκια", "kt")


                .createAlias("mate", "mt")


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


                .list();


(createAlias()) δεν δημιουργεί μια νέα παρουσία των Κριτηρίων. Σημειώστε ότι η κλάση συλλογής γατών που διατηρείται από την παρουσία Cat στα δύο προηγούμενα ερωτήματα δεν είναι προ-φιλτραρισμένη με κριτήρια! Εάν θέλετε να επιστρέψετε μόνο γατάκια που πληρούν τα κριτήρια, πρέπει να χρησιμοποιήσετε το returnMaps().


Λίστα cats = sess.createCriteria(Cat.class)


.createCriteria("γατάκια", "kt")


.add( Expression.eq("όνομα", "F%") )


.returnMaps()


.list();


Επαναλήπτης iter = cats.iterator();


ενώ ( iter.hasNext())


{  


Χάρτης χάρτη = (Χάρτης) iter.next();


Γάτα γάτα = (Γάτα) map.get(Criteria.ROOT_ALIAS);


Γατάκι γάτας = (Γάτα) map.get("kt");


}


5. Δυναμική ανάκτηση συσχέτισης Μπορείτε να αλλάξετε την πολιτική αυτόματης ανάκτησης αντικειμένων συσχέτισης ορίζοντας το FetchMode() κατά το χρόνο εκτέλεσης.



Λίστα cats = sess.createCriteria(Cat.class)


                .add( Έκφραση.like("όνομα", "Fritz%") )


                .setFetchMode("mate", FetchMode.EAGER)


                .list();


Αυτό το ερώτημα θα λάβει τόσο το σύντροφο όσο και τα γατάκια μέσω της εξωτερικής σύνδεσης.


6. Σύμφωνα με το Παράδειγμα ερωτημάτων net.sf.hibernate.expression.Example κλάση, μπορείτε να δημιουργήσετε συνθήκες ερωτήματος από την καθορισμένη παρουσία.


Γάτα γάτα = νέα Γάτα();


cat.setSex('F');


cat.setColor(Χρώμα.ΜΑΥΡΟ);


Αποτελέσματα λίστας = session.createCriteria(Cat.class)


                    .add( Παράδειγμα.create(γάτα) )


                    .list();
Οι ιδιότητες έκδοσης, οι ιδιότητες αναπαράστασης και οι συσχετίσεις παραβλέπονται. Από προεπιλογή, εξαιρούνται επίσης τα χαρακτηριστικά null. Μπορείτε να προσαρμόσετε τον τρόπο εφαρμογής του Παραδείγματος. Μπορείς
για να προσαρμόσετε τον τρόπο εφαρμογής του παραδείγματος. Παράδειγμα παραδείγματος = Example.create(cat) .excludeZeroes() //exclude ιδιότητες μηδενικής τιμής


.excludeProperty("color") //exclude της ιδιότητας με το όνομα "color" .ignoreCase() //perform συγκρίσεις συμβολοσειρών χωρίς διάκριση πεζών-κεφαλαίων


.enableLike(); Χρησιμοποιήστε το like για συγκρίσεις συμβολοσειρών


Αποτελέσματα λίστας = session.createCriteria(Cat.class)


                      .add(παράδειγμα)


                      .list();
Μπορείτε ακόμη να χρησιμοποιήσετε παραδείγματα για να καθορίσετε κριτήρια για συσχετισμένα αντικείμενα. Αποτελέσματα λίστας = session.createCriteria(Cat.class) .add(Example.create(cat) )


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


Ο κωδικός αναφοράς έχει ως εξής:






Προηγούμενος:LINQ αριστερά, δεξιά και εσωτερικές συνδέσεις
Επόμενος:Η διαφορά μεταξύ των μεταβλητών ορισμού let και var στο js
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com