Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 16672|Svare: 0

[Kilde] Den detaljerte bruken av createCriteria er QBC-spørringen i Hibernate

[Kopier lenke]
Publisert på 09.08.2017 14:26:13 | | |

La oss nå si at det finnes en studentklasse med id-, navn- og aldersattributter
Streng hql = "fra student s";
Som vi pleide, gjør vi det som regel
Query query = session.createQuery(hql);
Eller hvis du vil søke etter betingelsene.
Streng hql = "fra Student s hvor s.name som 'King%'"
Query query = session.createQuery(hql);
Hvis du bruker QBC i stedet for HQL, er koden:
Kriterier =session.createCriteria(Student.class);
Kriterium kriterium = Uttrykk.like("navn","konge%");
Jeg kan ikke se det slik. Deretter legger vi søkebetingelsen til alderen 22.
HQL:
Streng hql = "fra Student s hvor s.name som 'Wang%' og s.age= 22";
Query query = session.createQuery(hql);
List list = query.list();
QBC:
Kriterier =session.createCriteria(Student.class);
Kriterium kriterium1 = Uttrykk.som("navn","konge%");
Kriterium kriterium2 = Uttrykk.eq("alder",nyHeltall(22));
criteria.add(kriterium1).add(kriterium2);
Listeliste = criteria.list();


Det ser mye mer tungvint ut. Men alle som har gjort et prosjekt vet at når en moduls forretningslogikk endres, må den ofte skrive om SQL, og det mest irriterende og irriterende er å ta noen andres HQL eller SQL.
Hvis du bruker QBC, øker det lesbarheten og vedlikeholdbarheten av koden betydelig.
Det er viktig å merke seg at nullverdien er verdien
For eksempel, når vi vil finne et Student-objekt med et nullnavn, bør vi skrive det slik
Kriterier =session.createCriteria(Student.class);
Kriterium kriterium = Expression.isNull("name");
criteria.add(criterion).list();
og brukte mellom... og tid
Kriterier =session.createCriteria(Student.class);
Kriterium kriterium1 = Expression.ge("alder", nytt heltall(20)); Nedre grense
Kriterium kriterium2 = Uttrykk.le("alder",nytt heltall(25)); Tak
//这里也可以把上述两个条件添加到第三个条件里
Kriterium kriterium3 =Uttrykk.og(kriterium1,kriterium2);
criteria.add(criterion3).list();
Tilsvarende fra elever hvor barn er mellom 20 og 25 år
Ekvivalent med fra Student s hvor s.alder >= 20 og s.alder <=25


Følgende er en sammenligning av de mest brukte spørringsbetingelsene for HQL og QBC
Uttrykk som betyr HQL QBC
større enn eller lik > = Expression.ge()
Større enn > Expression.gt()
Mindre enn eller lik < = Expression.le()
Mindre enn < Expression.lt()
liker = Uttrykk.eq()
er ikke lik <>eller!= Expression.ne()

Null er null Expression.isNull()
is notnull Expression.isNotNull()
Innenfor det angitte intervallet mellom og Expression.between()
Ikke i det spesifiserte området ikke mellom og Expression.not(Expression.between())
Tilhører en samling i Expression.in()
Ikke en del av en samling notin Expression.not(Expression.in())
og uttrykk.og()
eller Expression.or()
Not Expression.not()
Fuzzy spørring som Expression.like



1. Opprett en Criteria-instans net.sf.hibernate.Criteria Dette grensesnittet representerer en spørring etter en spesifikk persistensklasse. Session er fabrikken som brukes til å produsere Criteria-instansen.



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


crit.setMaxResults(50);


List cats = crit.list();


2. Begrens omfanget av resultatsettet En spørringsbetingelse (Criterion) er en instans av net.sf.hibernate.expression.Criterion-grensesnittet. Klassen net.sf.hibernate.expression.Expression definerer for å hente noen innebygde Criterion-typer.


List cats = sess.createCriteria(Cat.class)


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


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


                .list();
Uttrykk kan grupperes logisk.

List cats = sess.createCriteria(Cat.class)



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


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


                .list();


List cats = sess.createCriteria(Cat.class)


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


                .add( Expression.disjunksjon()


                .add( Expression.isNull("age") )


                .add( Expression.eq("age", ny heltall(0) ) )


                .add( Expression.eq("age", ny heltall(1) ) )


                .add( Expression.eq("age", ny heltall(2) ) ) ) )


                 .list();
Det finnes mange forhåndslagde tilstandstyper (underklasser av uttrykk). Det finnes en spesielt nyttig som lar deg legge inn SQL direkte.

List cats = sess.createCriteria(Cat.class)



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


                .list();  
hvor {alias} er en plassholder, vil den bli erstattet av linjealiaset til den forespurte enheten. (Original: {alias}-plassholderen må erstattes med radaliaset til den forespurte enheten.)


3. Sorter resultatene Du kan bruke net.sf.hibernate.expression.Order for å sortere resultatsettet.


List cats = sess.createCriteria(Cat.class)



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


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


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


                .setMaxResults(50)


                .list();


4. Assosiasjoner Du kan bruke createCriteria() mellom assosiasjoner for enkelt å spesifisere begrensninger mellom enheter med relasjoner.

List cats = sess.createCriteria(Cat.class)



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


                 .createCriteria("kattunger")


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


                 .list();


Merk at den andre createCriteria() returnerer en ny instans av Criteria, som peker på et element i kattungens samlingsklasse. Følgende alternative former er nyttige i spesifikke situasjoner.


List cats = sess.createCriteria(Cat.class)


                .createAlias("kittens", "kt")


                .createAlias("mate", "mt")


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


                .list();


(createAlias()) oppretter ikke en ny instans av Criteria. Merk at kattunger-samlingsklassen som Cat-instansen har i de to foregående spørringene ikke er forhåndsfiltrert etter kriterier! Hvis du vil returnere kun kattunger som oppfyller kriteriene, må du bruke returnMaps().


List cats = sess.createCriteria(Cat.class)


.createCriteria ("kattunger", "kt")


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


.returnMaps()


.list();


Iterator iter = cats.iterator();


mens ( iter.hasNext())


{  


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


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


Cat kitten = (Cat) map.get("kt");


}


5. Dynamisk assosiasjonshenting Du kan endre den automatiske hentepolicyen for assosiasjonsobjekter ved å sette FetchMode() under kjøretid.



List cats = sess.createCriteria(Cat.class)


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


                .setFetchMode("mate", FetchMode.EAGER)


                .list();


Denne forespørselen vil få både make og kattunger via ytre sammenkobling.


6. Ifølge klassen Example queries net.sf.hibernate.expression.Example kan du lage spørringsbetingelser fra den angitte instansen.


Katt = ny katt ();


cat.setSex('F');


cat.setColor(Color.BLACK);


Listeresultater = session.createCriteria(Cat.class)


                    .add( Example.create(cat) )


                    .list();
Versjonsegenskaper, representasjonsegenskaper og assosiasjoner ignoreres alle. Som standard er null-attributter også utelukket. Du kan justere hvordan eksempelet brukes. Du kan
for å justere hvordan eksempelet brukes. Eksempel eksempel = Example.create(cat) .excludeZeroes() //ekskluderer nullverdi-egenskaper


.excludeProperty("color") //ekskluderer egenskapen kalt "color" .ignoreCase() //perform case-insensitive streng-sammenligninger


.enableLike(); Bruk like for strengsammenligninger


Listeresultater = session.createCriteria(Cat.class)


                      .add(eksempel)


                      .list();
Du kan til og med bruke eksempler for å etablere kriterier for tilknyttede objekter. Listeresultater = session.createCriteria(Cat.class) .add(Example.create(cat) )


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


Referansekoden er som følger:






Foregående:LINQ venstre, høyre og indre forbindelser
Neste:Forskjellen mellom let og var-definisjonsvariabler i js
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com