Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 17122|Odgovoriti: 0

[Vir] Podrobna uporaba createCriteria je QBC poizvedba v Hibernate

[Kopiraj povezavo]
Objavljeno na 9. 08. 2017 14:26:13 | | |

Zdaj recimo, da obstaja razred Študent z atributi ID, Ime, Starost
Niz hql = "od študenta s";
Kot smo včasih počeli, tudi običajno
Query query = session.createQuery(hql);
Ali pa če želite iskati glede na pogoje.
String hql = "from Student s, kjer s.name kot 'King%'"
Query query = session.createQuery(hql);
Če uporabljate QBC namesto HQL, je koda:
Kriteriji =session.createCriteria(Študent.razred);
Kriterij = Expression.like("ime","kralj%");
Ne morem si tega predstavljati tako. Nato pogoj iskanja dodamo starosti 22 let.
HQL:
Niz hql = "od študenta s, kjer s.name kot 'Wang%' in s.age = 22 ";
Query query = session.createQuery(hql);
List list = query.list();
QBC:
Kriteriji =session.createCriteria(Študent.razred);
Kriterij 1 = Expression.like("ime","kralj%");
Kriterij 2 = Expression.eq("starost",newInteger(22));
criterion.add(criterion1).add(criterion2);
List list = criterion.list();


Zdi se veliko bolj nerodno. A vsak, ki je delal projekt, ve, da ko se poslovna logika modula spremeni, mora pogosto prepisati SQL, in najbolj nadležno in nadležno je, da prevzameš tuji HQL ali SQL.
Če uporabljate QBC, to močno poveča berljivost in vzdržljivost kode.
Pomembno je poudariti, da je ničelna vrednost vrednost
Na primer, ko želimo najti objekt Student z ničelnim imenom, ga moramo zapisati takole
Kriteriji =session.createCriteria(Študent.razred);
Kriterij = Expression.isNull("ime");
kriterij.add(criterion).list();
in uporaba vmes... in čas
Kriteriji =session.createCriteria(Študent.razred);
Kriterij 1 = Expression.ge("starost", novo celo število(20)); Spodnja meja
Kriterij 2 = Expression.le("starost",novo celo število(25)); Strop
//这里也可以把上述两个条件添加到第三个条件里
Kriterij 3 =Izraz.and(kriterij1,kriterij2);
criterion.add(criterion3).list();
Enakovredno kot pri učencih, ki so stari med 20 in 25 let.
Enako kot od učenca s, kjer je s.starost >= 20 in s.starost <=25


Naslednje je primerjava pogosto uporabljenih pogojev poizvedb za HQL in QBC
Pomen izraza HQL QBC
večje ali enako > = Expression.ge()
Več kot > Expression.gt()
Manj ali enako < = Expression.le()
Manj kot < Expression.lt()
enak = Expression.eq()
ni enako <>ali!= Expression.ne()

Null je null Expression.isNull()
je notnull Expression.isNotNull()
V določenem območju med in Expression.between()
Ne v določenem območju not betweenin in Expression.not(Expression.between())
Pripada zbirki v Expression.in()
Ni del zbirke notin Expression.not(Expression.in())
in expression.and()
ali Expression.or()
Not Expression.not()
Nejasna poizvedba kot Expression.like



1. Ustvarite primer kriterija net.sf.hibernate.Criteria Ta vmesnik predstavlja poizvedbo za določen razred trajnosti. Session je tovarna, ki se uporablja za izdelavo primerka Kriterijev.



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


crit.setMaxResults(50);


List cats = crit.list();


2. Zožite obseg množice rezultatov Pogoj poizvedbe (Criterion) je primer vmesnika net.sf.hibernate.expression.Criterion. Razred net.sf.hibernate.expression.Expression definira, da pridobi nekatere vgrajene tipe kriterijev.


List cats = sess.createCriteria(Cat.class)


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


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


                .list();
Izraze je mogoče logično združevati.

List cats = sess.createCriteria(Cat.class)



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


                .add( Expression.or( Expression.eq( "starost", novo celo število(0) ), Expression.isNull("starost")))


                .list();


List cats = sess.createCriteria(Cat.class)


                .add( Expression.in( "ime",novi niz[]{"Fritz","Izi","Pk"}))


                .add( Expression.disjunction()


                .add( Expression.isNull("starost") )


                .add( Expression.eq("age", novo celo število(0) ) )


                .add( Expression.eq("starost", novo celo število(1) ) )


                .add( Expression.eq("starost", novo celo število(2) ) ) ) )


                 .list();
Obstaja veliko vnaprej pripravljenih vrst pogojev (podrazredov izrazov). Obstaja še posebej uporaben način, ki omogoča neposredno vgradnjo SQL.

List cats = sess.createCriteria(Cat.class)



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


                .list();  
kjer je {alias} začasni element, ga nadomesti alias vrstice poizvedbene entitete. (Izvirno: Nadomestek {alias} z bo zamenjan z vrsticnim aliasom poizvedbene entitete.)


3. Razvrstite rezultate Za razvrščanje množice rezultatov lahko uporabite net.sf.hibernate.expression.Order.


List cats = sess.createCriteria(Cat.class)



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


                .addOrder( Order.asc("ime"))


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


                .setMaxResults(50)


                .list();


4. Povezave Lahko uporabite createCriteria() med povezavami za enostavno določitev omejitev med entitetami z relacijami.

List cats = sess.createCriteria(Cat.class)



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


                 .createCriteria("mucki")


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


                 .list();


Upoštevajte, da drugi createCriteria() vrne novo instanco Kriterija, ki kaže na element razreda zbirke muckov. Naslednje alternativne oblike so uporabne v specifičnih situacijah.


List cats = sess.createCriteria(Cat.class)


                .createAlias("mucke", "kt")


                .createAlias("mate", "mt")


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


                .list();


(createAlias()) ne ustvari nove instance kriterijev. Upoštevajte, da razred zbirke muck, ki ga ima instanca Cat v prejšnjih dveh poizvedbah, ni vnaprej filtriran po kriterijih! Če želite vrniti le mladičke, ki izpolnjujejo kriterije, morate uporabiti returnMaps().


List cats = sess.createCriteria(Cat.class)


.createCriteria("mucke", "kt")


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


.returnMaps()


.list();


Iterator iter = cats.iterator();


medtem ko (iter.hasNext())


{  


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


Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);


Mačji mucek = (Mačka) map.get("kt");


}


5. Dinamično pridobivanje asociacij Samodejno politiko pridobivanja asociacijskih objektov lahko spremenite tako, da med izvajanjem nastavite FetchMode().



List cats = sess.createCriteria(Cat.class)


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


                .setFetchMode("mate", FetchMode.EAGER)


                .list();


Ta poizvedba bo preko zunanjega združevanja pritegnila tako partnerja kot mladiče.


6. Po vzorčnih poizvedbah net.sf.hibernate.expression.example lahko ustvarite pogoje poizvedbe iz določene instance.


Cat cat = nova Cat();


cat.setSex('F');


cat.setColor(Color.BLACK);


List results = session.createCriteria(Cat.class)


                    .add( Example.create(cat) )


                    .list();
Lastnosti različic, lastnosti predstavitve in povezave so vse prezrte. Privzeto so izključeni tudi ničelni atributi. Lahko prilagodite, kako se primer uporablja. Ti lahko
za prilagoditev uporabe primera. Primer = Example.create(cat) .excludeZeroes() //izključi lastnosti z ničelno vrednostjo


.excludeProperty("color") //izključi lastnost z imenom "color" .ignoreCase() //izvajaj primerjave nizov, ki niso občutljive na primere


.enableLike(); Uporaba like za primerjavo nizov


List results = session.createCriteria(Cat.class)


                      .add(example)


                      .list();
Primere lahko celo uporabite za določitev kriterijev za povezane predmete. List results = session.createCriteria(Cat.class) .add(Example.create(cat) )


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


Referenčna koda je naslednja:






Prejšnji:LINQ leve, desne in notranje povezave
Naslednji:Razlika med definicijskima spremenljivkama naj in var v js
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com