Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 16672|Válasz: 0

[Forrás] A createCriteria részletes használata a QBC lekérdezés a Hibernate-ben

[Linket másol]
Közzétéve 2017. 08. 09. 14:26:13 | | |

Most tegyük fel, hogy van egy diák osztály, amelynek azonosítója, neve, életkora jellemzői vannak
String hql = "Student s-től";
Ahogy régen tettük, általában is így van
Query query = session.createQuery(hql);
Vagy ha a feltételek szerint keresel.
String hql = "a Diákok s-ből, ahol s.name mint a 'King%'"
Query query = session.createQuery(hql);
Ha QBC-t használsz HQL helyett, akkor a kód a következő:
Kritériumok =session.createCriteria(Student.class);
Criterion criterion = Expression.like("name","king%");
Nem látom így a dolgot. Ezután hozzáadjuk a keresési feltételt a 22 éves korhoz.
HQL:
hql hql = "a Diákok s-ből ahol s.name 'Wang%' és s.age= 22 ";
Query query = session.createQuery(hql);
Lista list = query.list();
QBC:
Kritériumok =session.createCriteria(Student.class);
Criterion criterion1 = Expression.like("name","king%");
Criterion criterion2 = Expression.eq("age",newInteger(22));
criteria.add(criterion1).add(criterion2);
Lista lista = criteria.list();


Sokkal nehézebbnek tűnik. De aki már csinált projektet, tudja, hogy amikor egy modul üzleti logikája változik, gyakran át kell írnia SQL-t, és a legidegesítőbb és legbosszantóbb az, ha valaki más HQL-jét vagy SQL-jét veszi el.
Ha QBC-t használsz, jelentősen növeli a kód olvashatóságát és karbantarthatóságát.
Fontos megjegyezni, hogy a null érték az érték
Például, amikor null nevű Student objektumot akarunk találni, így kell írnunk
Kritériumok =session.createCriteria(Student.class);
Criterion criterion = Expression.isNull("name");
criteria.add(criterion).list();
és a kettő között... és idő
Kritériumok =session.createCriteria(Student.class);
Criterion1 kritérium = Expression.ge("kor", új egész szám(20)); Alsó határ
Criterion criterion2 = Expression.le("kor",új egész szám(25)); Mennyezet
//这里也可以把上述两个条件添加到第三个条件里
Criterion 3 =Expression.and(criterion1,criterion2);
criteria.add(criterion3).list();
Ez megfelel a diákoknak, akik 20 és 25 év között vannak
Ekvivalens a Diák s-ből, ahol s.kor >=20 és s.kor <=25


Az alábbiakban a HQL és a QBC leggyakrabban használt lekérdezési feltételeinek összehasonlítása látható
Kifejezés, jelentése HQL QBC
nagyobb, mint vagy egyenlő > = Expression.ge()
Nagyobb, mint > Expression.gt()
Kevesebb, mint vagy egyenlő < = Expression.le()
Kevesebb, mint < Expression.lt()
egyenlő = Expression.eq()
nem egyenlő <>vagy!= Expression.ne()

Null is null Expression.isNull()
is notnull Expression.isNotNull()
A megadott tartományon belül Expression.between() között
Nem a megadott tartományban nem betweenand Expression.not(Expression.between())
Egy gyűjteményhez tartozás Expression.in()
Nem része a gyűjteménynek Expression.not(Expression.in())
és kifejezés.és()
vagy Expression.or()
Nem Expression.not()
Fuzzy query, mint az Expression.like



1. Hozzon létre egy Criteria példányt net.sf.hibernate.Criteria Ez az interfész egy adott persistenciaosztály lekérdezését képviseli. A Session az a gyár, amelyet a Criteria példány gyártásához használnak.



Kritió kritik = sess.createCriteria(Cat.class);


crit.setMaxResults(50);


Lista macskák = crit.list();


2. Szűkítsd az eredményhalmaz hatókörét Egy lekérdezési feltétel (Criterion) a net.sf.hibernate.expression.Criterion interfész egy példánya. A net.sf.hibernate.expression.Expression osztály definiálja, hogy néhány beépített Criterion típust kapjon.


Lista macskák = sess.createCriteria(Cat.class)


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


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


                .list();
Az kifejezések logikusan csoportosíthatók.

Lista macskák = sess.createCriteria(Cat.class)



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


                .add( Expression.or( Expression.eq( "age", new Integer(0)), Expression.isNull("age"))


                .list();


Lista macskák = sess.createCriteria(Cat.class)


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


                .add( Expression.disjunction()


                .add( Expression.isNull("kor") )


                .add( Expression.eq("kor", új egész szám(0)) )


                .add( Expression.eq("age", új egész szám(1)) )


                .add( Expression.eq("age", új egész szám(2) )) ) ) )


                 .list();
Számos előre elkészített feltételtípus létezik (az Expressions alosztályai). Van egy különösen hasznos megoldás, amely lehetővé teszi, hogy közvetlenül beágyazd az SQL-t.

Lista macskák = sess.createCriteria(Cat.class)



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


                .list();  
ha {alias} helymeghatározó, akkor a lekérdezett entitás soraliájával helyettesítik. (Eredeti: A {alias} helykitöltőt a lekérdezett entitás soralias-a helyettesíti.)


3. Rendezd az eredményeket Használhatod a net.sf.hibernate.expression.Order fájlt az eredményhalmazhoz.


Lista macskák = sess.createCriteria(Cat.class)



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


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


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


                .setMaxResults(50)


                .list();


4. Assszociációk A createCriteria() segítségével az asszociációk között könnyen meghatározhatod a korlátokat a kapcsolatok közötti entitások között.

Lista macskák = sess.createCriteria(Cat.class)



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


                 .createCriteria ("kiscicák")


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


                 .list();


Fontos megjegyezni, hogy a második createCriteria() egy új Criteria példányt ad vissza, amely a kittens gyűjtemény osztályának egy elemére mutat. Az alábbi alternatív formák hasznosak bizonyos helyzetekben.


Lista macskák = sess.createCriteria(Cat.class)


                .createAlias("kittens", "kt")


                .createAlias("mat", "mt")


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


                .list();


(createAlias()) nem hoz létre új példányt a Kritériumokból. Fontos megjegyezni, hogy a Cat példány által az előző két lekérdezésben lévő kittens collection osztály nem előre szűrve van kritériumok alapján! Ha csak a kritériumoknak megfelelő kiscicákat szeretnél visszaküldeni, a returnMaps() segítségével kell használnod.


Lista macskák = sess.createCriteria(Cat.class)


.createCriteria("kittens", "kt")


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


.returnMaps()


.list();


Iterator iter = cats.iterator();


while ( iter.hasNext())


{  


Map map = (Leképezés) iter.next();


Macskamacska = (Macska) map.get(Criteria.ROOT_ALIAS);


Macskacica = (Macska) map.get("kt");


}


5. Dinamikus assosiáció lekérés Az asszociációs objektumok automatikus lekérési politikáját úgy módosíthatod, ha futásidőben beállítod a FetchMode() opciót.



Lista macskák = sess.createCriteria(Cat.class)


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


                .setFetchMode("mate", FetchMode.EAGER)


                .list();


Ez a lekérdezés mind a párt, mind a kiscicákat külső csatlakozáson keresztül juttatja meg.


6. A Example queries net.sf.hibernate.expression.Example osztály szerint a megadott példányból lekérdezési feltételeket hozhatsz létre.


Macskamacska = új Macska();


cat.setSex ('F');


cat.setColor (Szín.FEKETE);


Lista eredmények = session.createCriteria(Cat.class)


                    .add( Example.create(cat) )


                    .list();
A verzió tulajdonságai, reprezentációs tulajdonságai és az asszociációk mind figyelmen kívül kerülnek. Alapértelmezés szerint a null attribútumok is kizárnak. Módosíthatod, hogyan alkalmazzák a példát. Képes vagy
hogy módosítsam, hogyan alkalmazzák a példát. Példa = Example.create(cat) .excludeZeroes() //exclude nulla értékű tulajdonságok


.excludeProperty("color") //exclude a "color" nevű tulajdonságot .ignoreCase() //csinálj kihallgatásmentes string összehasonlításokat


.enableLike(); Használd like húrok összehasonlításához


Lista eredmények = session.createCriteria(Cat.class)


                      .add(példa)


                      .list();
Példákat is használhatsz a kapcsolódó objektumok kritériumainak meghatározására. Lista eredmények = session.createCriteria(Cat.class) .add(Example.create(cat))


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


A referencia kód a következő:






Előző:LINQ bal, jobb és belső kapcsolatok
Következő:A különbség a let és var definíciós változók között js-ben
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com