Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 16672|Vastaus: 0

[Lähde] createCriterian yksityiskohtainen käyttö on QBC-kysely Hibernate-järjestelmässä

[Kopioi linkki]
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ät
Seuraava:Ero let- ja var-määritelmämuuttujien välillä js:ssä
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com