See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 16672|Vastuse: 0

[Allikas] createCriteria üksikasjalik kasutus on QBC päring Hibernate'is

[Kopeeri link]
Postitatud 09.08.2017 14:26:13 | | |

Oletame nüüd, et on õpilasklass, millel on id, nimi ja vanuseomadused
String hql = "õpilasest s";
Nagu varem, teeme seda tavaliselt
Query query = session.createQuery(hql);
Või kui soovid otsida vastavalt tingimustele.
String hql = "õpilastest, kus s.name nagu 'King%'"
Query query = session.createQuery(hql);
Kui kasutad QBC-d HQL-i asemel, siis kood on järgmine:
Kriteeriumid =session.createCriteria(Student.class);
Kriteeriumi kriteerium = Väljend.like("nimi","kuningas%");
Ma ei suuda seda nii näha. Seejärel lisame otsingutingimuse vanusele 22.
HQL:
String hql = "õpilastest s, kus s.name nagu 'Wang%' ja s.age= 22 ";
Query query = session.createQuery(hql);
List list = query.list();
QBC:
Kriteeriumid =session.createCriteria(Student.class);
Kriteerium kriteerium1 = Väljend.like("nimi","kuningas%");
Kriteerium kriteerium2 = Avaldis.eq("vanus",newInteger(22));
criteria.add(kriteerium1).add(kriteerium2);
List list = criteria.list();


See näeb palju kohmakam välja. Aga igaüks, kes on projekti teinud, teab, et kui mooduli äriloogika muutub, tuleb tihti SQL-i ümber kirjutada, ja kõige tüütum ja tüütum on võtta kellegi teise HQL või SQL.
Kui kasutad QBC-d, suurendab see oluliselt koodi loetavust ja hooldatavust.
Oluline on märkida, et nullväärtus on väärtus
Näiteks, kui tahame leida Studenti objekti nullnimega, peaksime selle kirjutama nii
Kriteeriumid =session.createCriteria(Student.class);
Kriteeriumi kriteerium = Expression.isNull("nimi");
criteria.add(criterion).list();
ja kasutades vahepeal... ja aeg
Kriteeriumid =session.createCriteria(Student.class);
Kriteerium1 = Expression.ge("vanus", uus täisarv(20)); Alumine piir
Kriteerium2 = Avaldis.le("vanus",uus täisarv(25)); Lagi
//这里也可以把上述两个条件添加到第三个条件里
Kriteerium kriteerium 3 = Avaldis.and(kriteerium 1,kriteerium2);
criteria.add(criterion3).list();
Võrdväärne õpilaste s-ga, kus vanuses on 20–25
Võrdväärne õpilastest s, kus s.vanus >= 20 ja s.vanus <=25


Järgnevalt on toodud HQL-i ja QBC laialdaselt kasutatavate päringutingimuste võrdlus
Väljend, mis tähendab HQL QBC
suurem või võrdne > = Expression.ge()
Rohkem kui > Expression.gt()
Väiksem või võrdne < = Expression.le()
Vähem kui < Expression.lt()
võrdub = Avaldis.eq()
ei võrdu <>või!= Expression.ne()

Null on null Expression.isNull()
is notnull Expression.isNotNull()
Määratud vahemikus Expression.between() vahel
Mitte määratud vahemikus mitte-betweenand Expression.not(Expression.between())
Kuulumine Expression.in() kollektsiooni
Ei kuulu kogumiku hulka, notin Expression.not(Expression.in())
ja väljendus.and()
või Expression.or()
Not Expression.not()
Hägune päring nagu Expression.like



1. Loo Criteria instance net.sf.hibernate.Criteria See liides esindab päringut konkreetse püsivusklassi kohta. Session on tehas, mida kasutatakse Criteria instantsi tootmiseksemplariks.



Kriteerium: kriitiline = sess.createCriteria(Cat.class);


crit.setMaxResults(50);


List cats = crit.list();


2. Kitsenda tulemuste hulga ulatust Päringutingimus (Criterion) on net.sf.hibernate.expression.Criterion liidese eksemplar. Klass net.sf.hibernate.expression.Expression defineerib, et saada mõned sisseehitatud Criterion tüübid.


List cats = sess.createCriteria(Cat.class)


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


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


                .list();
Avaldisi saab loogiliselt grupeerida.

List cats = sess.createCriteria(Cat.class)



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


                .add( Expression.or( Expression.eq( "vanus", uus täisarv(0)), Expression.isNull("vanus"))


                .list();


List cats = sess.createCriteria(Cat.class)


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


                .add( Expression.disjunction()


                .add( Expression.isNull("vanus") )


                .add( Expression.eq("vanus", uus täisarv(0)) )


                .add( Expression.eq("vanus", uus täisarv(1)) )


                .add( Expression.eq("vanus", uus täisarvu(2)) ) ) )


                 .list();
On palju eelvalmistatud tingimustüüpe (avaldiste alamklassid). On olemas eriti kasulik lahendus, mis võimaldab SQL-i otse manustada.

List cats = sess.createCriteria(Cat.class)



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


                .list();  
kui {alias} on ajutine, asendatakse see päringu objekti rea alias'ega. (Originaal: {alias} kohatäitja asendatakse päringu objekti rea aliasega.)


3. Sorteeri tulemused Tulemuste sorteerimiseks saad kasutada net.sf.hibernate.expression.Order.


List cats = sess.createCriteria(Cat.class)



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


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


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


                .setMaxResults(50)


                .list();


4. Seosed Saad kasutada createCriteria() seoste vahel, et hõlpsasti määratleda piiranguid suhetega üksuste vahel.

List cats = sess.createCriteria(Cat.class)



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


                 .createCriteria("kassipojad")


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


                 .list();


Pane tähele, et teine createCriteria() tagastab uue Criteria'i eksemplari, osutades kassikogumise klassi elemendile. Järgmised alternatiivsed vormid on kasulikud konkreetsetes olukordades.


List cats = sess.createCriteria(Cat.class)


                .createAlias("kassipojad", "kt")


                .createAlias("mate", "mt")


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


                .list();


(createAlias()) ei loo uut Kriteeriumi eksemplari. Pane tähele, et kassipoegade kogumise klass, mida Cat instants eelnevates kahes päringus hoiab, ei ole eelfiltreeritud kriteeriumite järgi! Kui soovid tagastada ainult kassipoegi, kes vastavad kriteeriumidele, pead kasutama returnMaps().


List cats = sess.createCriteria(Cat.class)


.createCriteria("kassipojad", "kt")


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


.returnMaps()


.list();


Iterator iter = cats.iterator();


while ( iter.hasNext())


{  


Kaardikaart = (Kaart) iter.next();


Kass kass = (Kass) map.get(Criteria.ROOT_ALIAS);


Kassipoeg = (Kass) map.get("kt");


}


5. Dünaamiline assotsiatsiooni toomine Saad muuta assotsiatsiooniobjektide automaatse toomise poliitikat, seadistades käitusajal FetchMode().



List cats = sess.createCriteria(Cat.class)


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


                .setFetchMode("mate", FetchMode.EAGER)


                .list();


See päring toob nii paarilised kui kassipojad välisühenduse kaudu.


6. Vastavalt Sample queries net.sf.hibernate.expression.Example klassile saab määratud eksemplarist luua päringutingimusi.


Kass kass = uus kass();


cat.setSugu ('F');


cat.setColor (Color.BLACK);


Listi tulemused = session.createCriteria(Cat.class)


                    .add( Example.create(cat) )


                    .list();
Versiooni omadused, esitusomadused ja seosed jäetakse kõik tähelepanuta. Vaikimisi on nullatribuudid samuti välistatud. Saad kohandada, kuidas näidet rakendatakse. Sa saad
et kohandada, kuidas näidet rakendatakse. Näide = Example.create(cat) .excludeZeroes() //exclude nullväärtuslikud omadused


.excludeProperty("color") //exclude omadus nimega "color" .ignoreCase() //tee käänbutundlikke stringide võrdlusi


.enableLike(); Kasuta nagu keele võrdluseks


Listi tulemused = session.createCriteria(Cat.class)


                      .add (näide)


                      .list();
Sa võid isegi kasutada näiteid, et määrata seotud objektide kriteeriumid. Loendi tulemused = session.createCriteria(Cat.class) .add(Example.create(cat))


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


Viitekood on järgmine:






Eelmine:LINQ vasak-, parem- ja sisemised ühendused
Järgmine:Erinevus let ja var definitsiooni muutujate vahel js-is
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com