|
|
Julkaistu 9.8.2017 14.26.13
|
|
|

Oletetaan, että on opiskelijaluokka, jolla on id, nimi ja ikäominaisuudet Merkkijono hql = "Student s:stä"; Kuten ennenkin, yleensä teemme niin Kyselykysely = session.createQuery(hql); Tai jos haluat hakea olosuhteiden mukaan. String hql = "Student s:stä, jossa s.name kuin 'King%'" Kyselykysely = session.createQuery(hql); Jos käytät QBC:tä HQL:n sijaan, koodi on: Kriteerit =session.createCriteria(Student.class); Kriteerikriteeri = Lauseke.like("nimi","kuningas%"); En voi nähdä sitä näin. Sitten lisätään hakuehto ikään 22.
HQL: Merkkijono hql = "Student s:stä, missä s.name kuten 'Wang%' ja s.age= 22"; Kyselykysely = session.createQuery(hql); Lista = query.list();
QBC: Kriteerit =session.createCriteria(Student.class); Kriteeri kriteeri1 = Lauseke.like("nimi","kuningas%"); Kriteeri kriteeri2 = Lauseke.eq("ikä",newInteger(22)); criteria.add(criterion1).add(criterion2); Lista = criteria.list();
Se näyttää paljon kömpelömmältä. Mutta kuka tahansa, joka on tehnyt projektin, tietää, että kun moduulin liiketoimintalogiikka muuttuu, sen täytyy usein kirjoittaa SQL:ää uudelleen, ja ärsyttävin ja ärsyttävin asia on ottaa jonkun toisen HQL tai SQL. Jos käytät QBC:tä, koodin luettavuus ja ylläpidettävyys paranevat huomattavasti. On tärkeää huomata, että nollaarvo on arvo Esimerkiksi, kun haluamme löytää Student-objektin, jolla on nollanimi, meidän tulisi kirjoittaa se näin Kriteerit =session.createCriteria(Student.class); Kriteerikriteeri = Expression.isNull("nimi"); criteria.add(criterion).list(); ja käyttäen väliä... ja aika Kriteerit =session.createCriteria(Student.class); Kriteeri kriteeri1 = Expression.ge("ikä", uusi kokonaisluku(20)); Alaraja Kriteerikriteeri2 = Lauseke le("ikä", uusi kokonaisluku(25)); Katto
//这里也可以把上述两个条件添加到第三个条件里 Kriteeri kriteeri3 =Lauseke.ja(kriteeri1,kriteeri2); criteria.add(criterion3).list(); Vastaava taso opiskelijoilta, joiden ikä on 20–25 Vastaava luokkaa Opiskelija s, missä s.ikä >= 20 ja s.ikä <=25
Seuraavassa on vertailu yleisesti käytetyistä kyselyehdoista, kuten HQL:stä ja QBC:stä, Ilmaus, joka tarkoittaa HQL QBC:tä suurempi tai yhtä suuri kuin > = Expression.ge() Yli > Expression.gt() Pienempi tai yhtä suuri kuin < = Lauseke.le() Alle < Expression.lt() equals = Expression.eq() ei ole <>tai!= Expression.ne()
Null on null Expression.isNull() is notnull Expression.isNotNull() Määritellyn alueen sisällä Expression.between() välillä Ei määritetyllä alueella, ei välissä ja Expression.not(Expression.between()) Kuuluminen kokoelmaan Expression.in() Ei osa kokoelmaa Expression.not(Expression.in()) ja expression.and() tai Expression.or() Ei Expression.not() Sumea kysely kuten Expression.like
1. Luo Criterion-instanssi net.sf.hibernate.Criteria Tämä rajapinta edustaa kyselyä tietylle pysyvyysluokalle. Session on tehdas, jolla valmistetaan Criteria-instanssi.
Kriteerit crit = sess.createCriteria(Cat.class);
crit.setMaxResults(50);
Lista kissat = crit.list();
2. Kavenna tulosjoukon laajuutta Kyselyehto (Criterion) on net.sf.hibernate.expression.Criterion-rajapinnan instanssi. Luokka net.sf.hibernate.expression.Expression määrittelee saadakseen joitakin sisäänrakennettuja Criterion-tyyppejä.
Lista cats = sess.createCriteria(Cat.class)
.add( Ilmaisu.like("name", "Fritz%") )
.add( Expression.between("weight", minWeight, maxWeight))
.list(); Lausekkeet voidaan loogisesti ryhmitellä.
Lista cats = sess.createCriteria(Cat.class)
.add( Ilmaisu.like("name", "Fritz%") )
.add( Expression.or( Expression.eq( "age", new Integer(0)), Expression.isNull("ikä"))
.list();
Lista cats = sess.createCriteria(Cat.class)
.add( Expression.in( "name",new String[]{"Fritz","Izi","Pk"}))
.add( Lauseke.disjunktio()
.add( Expression.isNull("ikä") )
.add( Lauseke.eq("ikä", uusi kokonaisluku(0) ) )
.add( Lauseke.eq("ikä", uusi kokonaisluku(1)) )
.add( Lauseke.eq("ikä", uusi kokonaisluku(2) ) ) ) )
.list(); On olemassa paljon valmiita ehtotyyppejä (Lausekkeiden alaluokkia). On olemassa erityisen hyödyllinen versio, joka mahdollistaa SQL:n upottamisen suoraan.
Lista cats = sess.createCriteria(Cat.class)
.add( Expression.sql("lower($alias.name) kuten lower(?)", "Fritz%", Hibernate.STRING))
.list(); missä {alias} on paikkamerkki, se korvataan haetun yksikön rivialiaksella. (Alkuperäinen: {alias}-paikkamerkki korvataan haetun yksikön rivin aliaksella.)
3. Lajittele tulokset Voit käyttää net.sf.hibernate.expression.Order lajitellaksesi tulosjoukon.
Lista cats = sess.createCriteria(Cat.class)
.add( Expression.like("name", "F%")
.addOrder( Order.asc("name"))
.addOrder( Order.desc("age"))
.setMaxResults(50)
.list();
4. Assosiaatiot Voit käyttää createCriteria():tä assosiaatioiden välillä helposti määrittääksesi rajoitteita suhteiden omaavien entiteettien välillä.
Lista cats = sess.createCriteria(Cat.class)
.add( Expression.like("name", "F%")
.createCriteria("kissanpennut")
.add( Lauseke.like("nimi","F%")
.list();
Huomaa, että toinen createCriteria() palauttaa uuden Criteria-instanssin, joka osoittaa kittens-kokoelmaluokan alkioon. Seuraavat vaihtoehtoiset muodot ovat hyödyllisiä tietyissä tilanteissa.
Lista cats = sess.createCriteria(Cat.class)
.createAlias("kissanpennut", "kt")
.createAlias("mate", "mt")
.add(Expression.eqProperty("kt.name", "mt.name"))
.list();
(createAlias()) ei luo uutta Kriteerien instanssia. Huomaa, että Cattens-instanssin hallitsema kittens-kokoelmaluokka kahdessa edellisessä kyselyssä ei ole esisuodatettu kriteereillä! Jos haluat palauttaa vain kriteerit täyttäviä pentuja, sinun täytyy käyttää returnMaps().
Lista cats = sess.createCriteria(Cat.class)
.createCriteria("kissanpennut", "kt")
.add( Expression.eq("name", "F%") )
.returnMaps()
.list();
Iterator iter = cats.iterator();
while ( iter.hasNext())
{
Karttakartta = (Kartta) iter.next();
Kissa = (Kissa) map.get(Criteria.ROOT_ALIAS);
Kissanpentu = (Kissa) map.get("kt");
}
5. Dynaaminen assosiaatiohaku Voit muuttaa assosiaatioobjektien automaattisen hakupolitiikan asettamalla FetchMode() ajonaikaisesti.
Lista cats = sess.createCriteria(Cat.class)
.add( Ilmaisu.like("name", "Fritz%") )
.setFetchMode("mate", FetchMode.EAGER)
.list();
Tämä kysely saa sekä kumppanin että pennut ulkoliitoksen kautta.
6. Esimerkkikyselyiden net.sf.hibernate.expression.Example -luokan mukaan voit luoda kyselyehtoja määritetystä instanssista.
Kissa = uusi kissa();
cat.setSex('F');
cat.setColor (Väri.MUSTA);
Lista tulokset = session.createCriteria(Cat.class)
.add( Esimerkki.create(cat) )
.list(); Versio-ominaisuudet, esitysominaisuudet ja assosiaatiot jätetään kaikki huomiotta. Oletuksena myös null-attribuutit jätetään pois. Voit säätää, miten esimerkkiä sovelletaan. Voit Jotta voisimme säätää esimerkin soveltamista. Esimerkkiesimerkki = Example.create(cat) .excludeZeroes() //exclude nollaarvoiset ominaisuudet
.excludeProperty("color") //exclude ominaisuus nimeltä "color" .ignoreCase() //suorita kirjainvälikohtaisia merkkijonovertailuja
.enenable Like(); Käytä kuten merkkijonojen vertailuun
Lista tulokset = session.createCriteria(Cat.class)
.add (esimerkki)
.list(); Voit jopa käyttää esimerkkejä määrittääksesi kriteerejä liittyville objekteille. Lista tulokset = session.createCriteria(Cat.class) .add(Example.create(cat))
.createCriteria("mat") .add(Example.create(cat.getMate())) .list();
Viitekoodi on seuraava:
|
Edellinen:LINQ vasen, oikea ja sisäinen liitännätSeuraava:Ero let- ja var-määritelmämuuttujien välillä js:ssä
|