Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 16672|Odpoveď: 0

[Zdroj] Podrobné použitie createCriteria je QBC dotaz v Hibernate

[Kopírovať odkaz]
Zverejnené 9. 8. 2017 14:26:13 | | |

Teraz povedzme, že existuje trieda Študent s atribútmi id, meno, vek
Reťazec hql = "zo študenta s";
Ako kedysi, tak to robíme aj zvyčajne
Query query = session.createQuery(hql);
Alebo ak chcete hľadať podľa podmienok.
String hql = "from Student s where s.name like 'King%'"
Query query = session.createQuery(hql);
Ak použijete QBC namiesto HQL, kód je nasledovný:
Kritériá =session.createCriteria(Student.class);
Kritérium = Expression.like("meno","kráľ%");
Nevidím to takto. Potom pridáme podmienku vyhľadávania k veku 22 rokov.
HQL:
Reťazec hql = "zo študenta s, kde s.name ako 'Wang%' a s.age = 22 ";
Query query = session.createQuery(hql);
List list = query.list();
QBC:
Kritériá =session.createCriteria(Student.class);
Kritérium 1 = Expression.like("name","king%");
Kritérium2 = Expression.eq("age",newInteger(22));
criterion.add(criterion1).add(criterion2);
List list = criteria.list();


Vyzerá to oveľa nemotornejšie. Ale každý, kto robil projekt, vie, že keď sa zmení obchodná logika modulu, často musí prepísať SQL, a najotravnejšie a najotravnejšie je vziať niekomu inému HQL alebo SQL.
Ak použijete QBC, výrazne to zvýši čitateľnosť a udržiavateľnosť kódu.
Je dôležité poznamenať, že nulová hodnota je hodnota
Napríklad, keď chceme nájsť objekt Student s nulovým menom, mali by sme ho napísať takto
Kritériá =session.createCriteria(Student.class);
Kritérium = Expression.isNull("meno");
criterion.add(criterion).list();
a medzi tým... a čas
Kritériá =session.createCriteria(Student.class);
Kritérium 1 = Expression.ge("vek", nové celé číslo(20)); Dolná hranica
Kritérium kritéria2 = Expression.le("vek", nové celé číslo(25)); Strop
//这里也可以把上述两个条件添加到第三个条件里
Kritérium3 =Expression.and(criterion1,criterion2);
criterion.add(criterion3).list();
Ekvivalent od študentov vo veku medzi 20 a 25 rokmi
Ekvivalent od študenta s, kde s.vek >= 20 a s.vek <=25


Nasleduje porovnanie bežne používaných podmienok dotazovania HQL a QBC
Význam výrazu HQL QBC
väčšie alebo rovné > = Expression.ge()
Väčšie ako > Expression.gt()
Menej alebo rovné < = Expression.le()
Menej ako < Expression.lt()
rovná sa = Expression.eq()
nerovná sa <>alebo!= Expression.ne()

Null je null Expression.isNull()
is notnull Expression.isNotNull()
V rámci špecifikovaného rozsahu medzi a Expression.between()
Nie v špecifikovanom rozsahu, nie medzi a Expression.not(Expression.between())
Patriaca do zbierky v Expression.in()
Nie je súčasťou kolekcie notin Expression.not(Expression.in())
a expression.and()
alebo Expression.or()
Nie expression.not()
Fuzzy dotaz ako Expression.like



1. Vytvoriť inštanciu kritérií net.sf.hibernate.Criteria Toto rozhranie predstavuje dotaz na konkrétnu triedu perzystencie. Session je továreň používaná na výrobu inštancie Criteria.



Kritériá crit = sess.createCriteria(Cat.class);


crit.setMaxResults(50);


List cats = crit.list();


2. Zúžiť rozsah množiny výsledkov Podmienka dotazu (Criterion) je inštancia rozhrania net.sf.hibernate.expression.criterion. Trieda net.sf.hibernate.expression.Expression definuje na získanie niektorých vstavaných typov kritérií.


List cats = sess.createCriteria(Cat.class)


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


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


                .list();
Výrazy možno logicky zoskupiť.

List cats = sess.createCriteria(Cat.class)



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


                .add( Expression.or( Expression.eq( "vek", nové celé číslo(0) ), Expression.isNull("vek")))


                .list();


List cats = sess.createCriteria(Cat.class)


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


                .add( Expression.disjunction()


                .add( Expression.isNull("vek") )


                .add( Expression.eq("vek", nové celé číslo(0) ) )


                .add( Expression.eq("age", nové celé číslo(1) ) )


                .add( Expression.eq("vek", nové celé číslo(2) ) ) ) ) )


                 .list();
Existuje veľa predpripravených typov podmienok (podtriedy výrazov). Existuje jeden obzvlášť užitočný, ktorý umožňuje priamo vložiť SQL.

List cats = sess.createCriteria(Cat.class)



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


                .list();  
kde {alias} je zástupca, bude nahradený aliasom riadku dotazovanej entity. (Pôvodné: Zástupca {alias} by bol nahradený riadkovým aliasom dotazovanej entity.)


3. Zoradiť výsledky Môžete použiť net.sf.hibernate.expression.Order na zoradenie množiny výsledkov.


List cats = sess.createCriteria(Cat.class)



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


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


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


                .setMaxResults(50)


                .list();


4. Asociácie Môžete použiť createCriteria() medzi asociáciami na jednoduché určenie obmedzení medzi entitami s vzťahmi.

List cats = sess.createCriteria(Cat.class)



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


                 .createCriteria("mačiatka")


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


                 .list();


Všimnite si, že druhý createCriteria() vracia novú inštanciu Criteria, ktorá odkazuje na prvok triedy zbierky kittens. Nasledujúce alternatívne formy sú užitočné v konkrétnych situáciách.


List cats = sess.createCriteria(Cat.class)


                .createAlias("kittens", "kt")


                .createAlias("mate", "mt")


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


                .list();


(createAlias()) nevytvára novú inštanciu Kritérií. Upozorňujeme, že trieda kolekcie mačiatok, ktorú drží inštancia Cat v predchádzajúcich dvoch dotazoch, nie je predfiltrovaná podľa kritérií! Ak chcete vrátiť len mačiatka, ktoré spĺňajú kritériá, musíte použiť returnMaps().


List cats = sess.createCriteria(Cat.class)


.createCriteria("kittens", "kt")


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


.returnMaps()


.list();


Iterator iter = cats.iterator();


while ( iter.hasNext())


{  


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


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


Mačacie mačiatko = (Mačka) map.get("kt");


}


5. Dynamické načítavanie asociácií Môžete zmeniť automatickú politiku načítavania asociačných objektov nastavením FetchMode() počas behu.



List cats = sess.createCriteria(Cat.class)


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


                .setFetchMode("mate", FetchMode.EAGER)


                .list();


Tento dotaz prinesie partnera aj mačiatka cez vonkajšie spojenie.


6. Podľa príkladových dotazov net.sf.hibernate.expression.example triedy môžete vytvoriť podmienky dotazu zo špecifikovanej inštancie.


Cat cat = nový Cat();


cat.setSex('F');


cat.setColor(Color.BLACK);


List results = session.createCriteria(Cat.class)


                    .add( Example.create(cat) )


                    .list();
Vlastnosti verzií, vlastnosti reprezentácie a asociácie sú všetky ignorované. Predvolene sú vylúčené aj nulové atribúty. Môžete upraviť, ako sa príklad aplikuje. Môžeš
na úpravu spôsobu použitia príkladu. Príklad = Example.create(cat) .excludeZeroes() //exclude vlastnosti s nulovou hodnotou


.excludeProperty("color") //exclude vlastnosť s názvom "color" .ignoreCase() //vykonávajte porovnania reťazcov bez ohľadu na prípady


.enableLike(); Použitie like na porovnanie reťazcov


List results = session.createCriteria(Cat.class)


                      .add(example)


                      .list();
Môžete dokonca použiť príklady na stanovenie kritérií pre súvisiace objekty. List results = session.createCriteria(Cat.class) .add(Example.create(cat) )


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


Referenčný kód je nasledovný:






Predchádzajúci:LINQ ľavé, pravé a vnútorné spojenia
Budúci:Rozdiel medzi definačnými premennými nech a var v js
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com