Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 16672|Atbildi: 0

[Avots] Detalizēts createCriteria lietojums ir QBC vaicājums hibernācijas režīmā

[Kopēt saiti]
Publicēts 09.08.2017 14:26:13 | | |

Tagad pieņemsim, ka ir studentu klase ar ID, vārdu, vecuma atribūtiem
String hql = "no studenta s";
Kā mēs to darījām, mēs parasti to darām
Vaicājuma vaicājums = session.createQuery(hql);
Vai arī, ja vēlaties meklēt atbilstoši nosacījumiem.
String hql = "no studenta s, kur s.name piemēram, 'King%'"
Vaicājuma vaicājums = session.createQuery(hql);
Ja HQL vietā izmantojat QBC, tad kods ir:
Kritēriju kritēriji =sesija.createKritēriji(Students.klase);
Kritērija kritērijs = Expression.like("nosaukums","karalis%");
Es to neredzu šādi. Tad mēs pievienojam meklēšanas nosacījumu 22 gadu vecumam.
HQL:
String hql = "no studenta s, kur s.name, piemēram, 'Wang%' un s.age= 22 ";
Vaicājuma vaicājums = session.createQuery(hql);
Saraksta saraksts = query.list();
QBC:
Kritēriju kritēriji =sesija.createKritēriji(Students.klase);
Kritērija kritērijs1 = Izteiksme.like("vārds","karalis%");
Kritērija kritērijs2 = Izteiksme.eq("vecums",jaunsVesels skaitlis(22));
kritēriji.add(kritērijs1).add(kritērijs2);
Saraksta saraksts = kritēriji.saraksts();


Tas izskatās daudz apgrūtinošāks. Bet ikviens, kurš ir veicis projektu, zina, ka, mainoties moduļa biznesa loģikai, tam bieži ir jāpārraksta SQL, un visvairāk kaitinoša un kaitinoša lieta ir ņemt kāda cita HQL vai SQL.
Ja izmantojat QBC, tas ievērojami palielina koda lasāmību un uzturamību.
Ir svarīgi atzīmēt, ka nulles vērtība ir vērtība
Piemēram, ja mēs vēlamies atrast studenta objektu ar nulles nosaukumu, mums tas jāraksta šādi
Kritēriju kritēriji =sesija.createKritēriji(Students.klase);
Kritērija kritērijs = Expression.isNull("nosaukums");
kritēriji.add(kritērijs).saraksts();
un izmantojot starp... un laiks
Kritēriju kritēriji =sesija.createKritēriji(Students.klase);
Kritērija kritērijs1 = Expression.ge("vecums",jauns vesels skaitlis(20)); Apakšējā robeža
Kritērija kritērijs2 = Izteiksme.le("vecums",jauns vesels skaitlis(25)); Griesti
//这里也可以把上述两个条件添加到第三个条件里
Kritērija kritērijs3 =Izteiksme.un(kritērijs1,kritērijs2);
kritēriji.add(kritērijs3).saraksts();
Ekvivalents no studentiem, kur vecums no 20 līdz 25 gadiem
Ekvivalents no studentiem, kur s.vecums >= 20 un s.vecums <=25


Tālāk ir salīdzināti bieži izmantotie HQL un QBC vaicājuma nosacījumi
Izteiksme, kas nozīmē HQL QBC
lielāks vai vienāds ar > = Expression.ge()
Lielāks par > Expression.gt()
Mazāks vai vienāds ar < = Expression.le()
Mazāk nekā < Expression.lt()
vienāds = Izteiksme.eq()
nav vienāds ar <>vai!= Expression.ne()

Null ir null Expression.isNull()
is notnull Izteiksme.isNotNull()
Norādītajā diapazonā starp un Expression.between()
Nav norādītajā diapazonā, nevis starpun Izteiksme.not(Izteiksme.starp())
Piederība kolekcijai Expression.in()
Nav daļa no kolekcijas, kas nav iekļauta Expression.not(Expression.in())
un izteiksme.un()
vai Izteiksme.vai()
Nav izteiksme.not()
Neskaidrs vaicājums, piemēram, Expression.like



1. Izveidojiet kritēriju instanci net.sf.hibernate.Criteria Šis interfeiss ir vaicājums konkrētai noturības klasei. Sesija ir rūpnīca, kas tiek izmantota kritēriju instances izgatavošanai.



Kritēriju kritiķis = sess.createCriteria(Cat.class);


crit.setMaxResults(50);


Saraksts kaķi = crit.list();


2. Sašauriniet rezultātu kopas tvērumu Vaicājuma nosacījums (kritērijs) ir net.sf.hibernate.expression.Criterion interfeisa instance. Klase net.sf.hibernate.expression.Expression definē, lai iegūtu dažus iebūvētus kritēriju tipus.


Saraksta kaķi = sess.createCriteria(Cat.class)


                .add( Izteiksme.like("nosaukums", "Fritz%") )


                .add( Izteiksme.starp("svars", minSvars, maksimālais svars))


                .saraksts();
Izteiksmes var loģiski grupēt.

Saraksta kaķi = sess.createCriteria(Cat.class)



                .add( Izteiksme.like("nosaukums", "Fritz%") )


                .add( Izteiksme.vai( Izteiksme.eq( "vecums", jauns vesels skaitlis(0) ), Izteiksme.isNull("vecums")))


                .saraksts();


Saraksta kaķi = sess.createCriteria(Cat.class)


                .add( Expression.in( "nosaukums",jauna virkne[]{"Fritz","Izi","Pk"}))


                .add( izteiksme.disjunkcija()


                .add( Izteiksme.isNull("vecums") )


                .add( Izteiksme.eq("vecums", jauns vesels skaitlis(0) ) )


                .add( Izteiksme.eq("vecums", jauns vesels skaitlis(1) ) )


                .add( Izteiksme.eq("vecums", jauns vesels skaitlis(2) ) ) ) )


                 .saraksts();
Ir daudz iepriekš sagatavotu nosacījumu veidu (izteiksmju apakšklases). Ir īpaši noderīgs, kas ļauj tieši iegult SQL.

Saraksta kaķi = sess.createCriteria(Cat.class)



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


                .saraksts();  
Ja {aizstājvārds} ir vietturis, tas tiks aizstāts ar vaicātās entītijas rindas aizstājvārdu. (Oriģināls: {aizstājvārds} vietturis, kas jāaizstāj ar vaicātās entītijas rindas aizstājvārdu.)


3. Rezultātu kārtošana Rezultātu kopas kārtošanai varat izmantot net.sf.hibernate.expression.Order.


Saraksta kaķi = sess.createCriteria(Cat.class)



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


                .addOrder( Order.asc("nosaukums"))


                .addOrder( Order.desc("vecums"))


                .setMaxRezultāti(50)


                .saraksts();


4. Asociācijas Varat izmantot createCriteria() starp asociācijām, lai viegli norādītu ierobežojumus starp entītijām ar relācijām.

Saraksta kaķi = sess.createCriteria(Cat.class)



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


                 .createCriteria("kaķēni")


                 .add( Izteiksme.like("nosaukums","F%")


                 .saraksts();


Ņemiet vērā, ka otrais createCriteria() atgriež jaunu kritēriju instanci, norādot uz kaķēnu kolekcijas klases elementu. Īpašās situācijās ir noderīgas šādas alternatīvas formas.


Saraksta kaķi = sess.createCriteria(Cat.class)


                .createAlias("kaķēni", "kt")


                .createAlias("mate", "mt")


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


                .saraksts();


(createAlias()) neizveido jaunu kritēriju instanci. Ņemiet vērā, ka kaķēnu kolekcijas klase, kas atrodas kaķa instancē iepriekšējos divos vaicājumos, nav iepriekš filtrēta pēc kritērijiem! Ja vēlaties atgriezt tikai kaķēnus, kas atbilst kritērijiem, jums jāizmanto returnMaps().


Saraksta kaķi = sess.createCriteria(Cat.class)


.createCriteria("kaķēni", "kt")


.add( Izteiksme.eq("nosaukums", "F%") )


.returnMaps()


.saraksts();


Iterator iter = cats.iterator();


kamēr ( iter.hasNext())


{  


Kartes karte = (Karte) iter.next();


Kaķis kaķis = (Kaķis) map.get(Criteria.ROOT_ALIAS);


Kaķu kaķēns = (Kaķis) map.get("kt");


}


5. Dinamiskās piesaistes iegūšana Piesaistes objektu automātiskās iegūšanas politiku var mainīt, izpildlaikā iestatot FetchMode().



Saraksta kaķi = sess.createCriteria(Cat.class)


                .add( Izteiksme.like("nosaukums", "Fritz%") )


                .setFetchMode("mate", FetchMode.EAGER)


                .saraksts();


Šis vaicājums iegūs gan palīgu, gan kaķēnus, izmantojot ārējo savienojumu.


6. Saskaņā ar piemēru vaicājumi net.sf.hibernate.expression.Example klase, jūs varat izveidot vaicājuma nosacījumus no norādītās instances.


Kaķis kaķis = jauns kaķis ();


cat.setSex('F');


cat.setColor(Krāsa.MELNS);


Saraksta rezultāti = session.createCriteria(Cat.class)


                    .add( Piemērs.izveidot(kaķis) )


                    .saraksts();
Versijas rekvizīti, attēlojuma rekvizīti un asociācijas tiek ignorētas. Pēc noklusējuma tiek izslēgti arī atribūti Null. Varat pielāgot piemēra lietošanas veidu. Tu vari
, lai pielāgotu piemēra lietošanas veidu. Piemērs = Example.create(cat) .excludeZeroes() //exclude nulles vērtību rekvizītus


.excludeProperty("krāsa") //izslēgt rekvizītu ar nosaukumu "krāsa" .ignoreCase() //veikt reģistrjutīgu virkņu salīdzinājumus


.enableLike(); Izmantojiet līdzīgu virkņu salīdzināšanai


Saraksta rezultāti = session.createCriteria(Cat.class)


                      .add(piemērs)


                      .saraksts();
Varat pat izmantot piemērus, lai noteiktu kritērijus saistītajiem objektiem. Saraksta rezultāti = session.createCriteria(Cat.class) .add(Example.create(cat) )


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


Atsauces kods ir šāds:






Iepriekšējo:LINQ kreisie, labie un iekšējie savienojumi
Nākamo:Atšķirība starp let un var definīcijas mainīgajiem js
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com