Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 16672|Atsakyti: 0

[Šaltinis] Išsamus createCriteria naudojimas yra QBC užklausa užmigdymo režimu

[Kopijuoti nuorodą]
Paskelbta 2017-08-09 14:26:13 | | |

Dabar tarkime, kad yra studentų klasė su ID, vardas, amžiaus požymiai
String hql = "iš studento s";
Kaip mes darėme anksčiau, mes paprastai darome
Užklausos užklausa = session.createQuery(hql);
Arba jei norite ieškoti pagal sąlygas.
String hql = "iš mokinių s, kur s.name kaip 'King%'"
Užklausos užklausa = session.createQuery(hql);
Jei naudojate QBC, o ne HQL, kodas yra:
Kriterijų kriterijai =session.createCriteria(Student.class);
Kriterijus = Expression.like("vardas","karalius%");
Aš nematau to taip. Tada pridedame paieškos sąlygą iki 22 metų amžiaus.
HQL:
String hql = "iš studentų s, kur s.name kaip 'Wang%' ir s.age= 22 ";
Užklausos užklausa = session.createQuery(hql);
Sąrašo sąrašas = query.list();
QBC:
Kriterijų kriterijai =session.createCriteria(Student.class);
Kriterijus kriterijus1 = Išraiška.like("vardas","karalius%");
Kriterijus2 = Išraiška.eq("amžius",naujasSveikasis skaičius(22));
kriterijai.add(kriterijus1).add(kriterijus2);
Sąrašo sąrašas = kriterijai.sąrašas();


Tai atrodo daug sudėtingiau. Bet kiekvienas, kuris padarė projektą, žino, kad kai modulio verslo logika keičiasi, jis dažnai turi perrašyti SQL, ir labiausiai erzina ir erzina dalykas yra imtis kažkieno HQL arba SQL.
Jei naudojate QBC, tai labai padidina kodo skaitomumą ir priežiūrą.
Svarbu pažymėti, kad nulinė reikšmė yra reikšmė
Pavyzdžiui, kai norime rasti studento objektą su nuliniu pavadinimu, turėtume jį parašyti taip
Kriterijų kriterijai =session.createCriteria(Student.class);
Kriterijus = Expression.isNull("pavadinimas");
kriterijai.add(kriterijus).list();
ir naudojant tarp... ir laikas
Kriterijų kriterijai =session.createCriteria(Student.class);
Kriterijaus kriterijus1 = Expression.ge("amžius",naujas sveikasis skaičius(20)); Apatinė riba
Kriterijus2 = Išraiška.le("amžius",naujas sveikasis skaičius(25)); Lubos
//这里也可以把上述两个条件添加到第三个条件里
Kriterijus3 =Išraiška.ir(kriterijus1,2 kriterijus);
kriterijai.add(kriterijus3).sąrašas();
Atitinka iš studentų, kurių amžius yra nuo 20 iki 25 metų
Atitinka iš studentų s, kur s.age >= 20 ir s.age <=25


Toliau pateikiamas dažniausiai naudojamų HQL ir QBC užklausų sąlygų palyginimas
Išraiška, reiškianti HQL QBC
didesnis arba lygus > = Expression.ge()
Didesnis nei > Expression.gt()
Mažesnis arba lygus < = Expression.le()
Mažiau nei < Expression.lt()
lygus = Išraiška.eq()
nelygus <>arba!= Expression.ne()

Null yra null Expression.isNull()
is notnull Išraiška.isNotNull()
Nurodytame diapazone tarpir Expression.between()
Ne nurodytame diapazone ne tarpir Išraiška.not(Išraiška.tarp())
Priklausymas kolekcijai Expression.in()
Nėra rinkinio dalis, notin Expression.not(Expression.in())
ir išraiška.ir()
arba Išraiška.arba()
Ne išraiška.not()
Neaiški užklausa, pvz., Expression.like



1. Sukurkite kriterijų egzempliorių net.sf.hibernate.Criteria Ši sąsaja yra konkrečios patvarumo klasės užklausa. Seansas yra gamykla, naudojama kriterijų egzemplioriui gaminti.



Kriterijus crit = sess.createCriteria(Cat.class);


crit.setMaxResults(50);


Sąrašas katės = crit.list();


2. Susiaurinkite rezultatų rinkinio aprėptį Užklausos sąlyga (kriterijus) yra net.sf.hibernate.expression.Criterion sąsajos egzempliorius. Klasė net.sf.hibernate.expression.Expression apibrėžia, kad gautų kai kuriuos įtaisytuosius kriterijų tipus.


Sąrašas katės = sess.createCriteria(Cat.class)


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


                .add( Išraiška.bet("svoris", minSvoris, maksimalus svoris))


                .list();
Išraiškos gali būti logiškai sugrupuotos.

Sąrašas katės = sess.createCriteria(Cat.class)



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


                .add( Išraiška.arba( Išraiška.eq( "amžius", naujas sveikasis skaičius(0) ), Išraiška.isNull("amžius")))


                .list();


Sąrašas katės = sess.createCriteria(Cat.class)


                .add( Expression.in( "pavadinimas",nauja eilutė[]{"Fritz","Izi","Pk"}))


                .add( Išraiška.disjunkcija()


                .add( Išraiška.isNull("amžius") )


                .add( Išraiška.eq("amžius", naujas sveikasis skaičius(0) ) )


                .add( Expression.eq("amžius", naujas sveikasis skaičius(1) ) )


                .add( Expression.eq("amžius", naujas sveikasis skaičius(2) ) ) ) ) )


                 .list();
Yra daug iš anksto paruoštų sąlygų tipų (išraiškų poklasių). Yra ypač naudingas, leidžiantis tiesiogiai įterpti SQL.

Sąrašas katės = sess.createCriteria(Cat.class)



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


                .list();  
Jei {pseudonimas} yra vietos rezervavimo ženklas, jis bus pakeistas užklausos objekto eilutės pseudonimu. (Originalas: {pseudonimas} vietos rezervavimo ženklas, pakeistas užklausos objekto eilutės pseudonimu.)


3. Rūšiuokite rezultatus Norėdami rūšiuoti rezultatų rinkinį, galite naudoti net.sf.hibernate.expression.Order.


Sąrašas katės = sess.createCriteria(Cat.class)



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


                .addOrder( Order.asc("pavadinimas"))


                .addOrder( Order.desc("amžius"))


                .setMaxRezultatai(50)


                .list();


4. Asociacijos Galite naudoti createCriteria() tarp asociacijų, kad lengvai nurodytumėte apribojimus tarp objektų su ryšiais.

Sąrašas katės = sess.createCriteria(Cat.class)



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


                 .createCriteria("kačiukai")


                 .add( Išraiška.like("pavadinimas","F%")


                 .list();


Atkreipkite dėmesį, kad antrasis createCriteria() pateikia naują kriterijų egzempliorių, nurodantį kačiukų kolekcijos klasės elementą. Šios alternatyvios formos yra naudingos konkrečiose situacijose.


Sąrašas katės = sess.createCriteria(Cat.class)


                .createAlias("kačiukai", "kt")


                .createAlias("mate", "mt")


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


                .list();


(createAlias()) nesukuria naujo kriterijų egzemplioriaus. Atkreipkite dėmesį, kad kačiukų surinkimo klasė, kurią turi kačių egzempliorius ankstesnėse dviejose užklausose, nėra iš anksto filtruojama pagal kriterijus! Jei norite grąžinti tik kriterijus atitinkančius kačiukus, turite naudoti returnMaps().


Sąrašas katės = sess.createCriteria(Cat.class)


.createCriteria("kačiukai", "kt")


.add( Išraiška.eq("pavadinimas", "F%") )


.returnMaps()


.list();


Iterator iter = cats.iterator();


o ( iter.hasNext())


{  


Žemėlapio žemėlapis = (Žemėlapis) iter.next();


Katė katė = (Katė) map.get(Criteria.ROOT_ALIAS);


Katė kačiukas = (Katė) map.get("kt");


}


5. Dinaminio susiejimo gavimas Galite pakeisti automatinio susiejimo objektų gavimo strategiją vykdymo metu nustatydami FetchMode().



Sąrašas katės = sess.createCriteria(Cat.class)


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


                .setFetchMode("mate", FetchMode.EAGER)


                .list();


Ši užklausa gaus ir porą, ir kačiukus per išorinį sujungimą.


6. Pagal pavyzdines užklausas net.sf.hibernate.expression.Example klasė, galite sukurti užklausos sąlygas iš nurodyto egzemplioriaus.


Katė katė = nauja katė ();


cat.setSex('F');


cat.setColor(Spalva.JUODA);


Sąrašo rezultatai = session.createCriteria(Cat.class)


                    .add( Example.create(cat) )


                    .list();
Nepaisoma versijos ypatybių, reprezentacijos ypatybių ir asociacijų. Pagal numatytuosius nustatymus neįtraukiami ir nuliniai atributai. Galite koreguoti, kaip taikomas pavyzdys. Tu gali
, kad pakoreguotumėte, kaip taikomas pavyzdys. Pavyzdys = Example.create(cat) .excludeZeroes() //exclude nulinės reikšmės ypatybės


.excludeProperty("color") //neįtraukti ypatybės pavadinimu "color" .ignoreCase() //atlikti eilučių palyginimus be didžiųjų ir mažųjų raidžių


.enableLike(); Naudokite kaip eilučių palyginimui


Sąrašo rezultatai = session.createCriteria(Cat.class)


                      .add(pavyzdys)


                      .list();
Jūs netgi galite naudoti pavyzdžius, kad nustatytumėte susietų objektų kriterijus. Sąrašo rezultatai = session.createCriteria(Cat.class) .add(Example.create(cat) )


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


Nuorodos kodas yra toks:






Ankstesnis:LINQ kairės, dešinės ir vidinės jungtys
Kitą:Skirtumas tarp let ir var apibrėžimo kintamųjų js
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com