Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 16672|Svar: 0

[Källa] Den detaljerade användningen av createCriteria är QBC-frågan i Hibernate

[Kopiera länk]
Publicerad på 2017-08-09 14:26:13 | | |

Låt oss nu säga att det finns en studentklass med id-, namn- och åldersattribut
Sträng hql = "från Student s";
Som vi brukade göra, brukar vi göra det
Query query = session.createQuery(hql);
Eller om du vill söka efter villkoren.
Sträng hql = "från Student s där s.name som 'King%'"
Query query = session.createQuery(hql);
Om du använder QBC istället för HQL, så är koden:
Kriterier =session.createCriteria(Student.class);
Kriterium kriterium = Uttryck.lika("namn","kung%");
Jag kan inte se det så här. Sedan lägger vi till sökvillkoret till åldern 22.
HQL:
Sträng hql = "från Student s där s.name som 'Wang%' och s.age= 22 ";
Query query = session.createQuery(hql);
List list = query.list();
QBC:
Kriterier =session.createCriteria(Student.class);
Kriterium kriterium1 = Uttryck.lik("namn","kung%");
Kriterium kriterium2 = Uttryck.eq("ålder",nyttHeltal(22));
criteria.add(kriterium1).add(kriterium2);
Listlista = criteria.list();


Det ser mycket mer otympligt ut. Men alla som har gjort ett projekt vet att när en moduls affärslogik ändras måste den ofta skriva om SQL, och det mest irriterande och irriterande är att ta någon annans HQL eller SQL.
Om du använder QBC ökar det läsbarheten och underhållet av koden avsevärt.
Det är viktigt att notera att nullvärdet är värdet
Till exempel, när vi vill hitta ett Student-objekt med ett nullnamn, bör vi skriva det så här
Kriterier =session.createCriteria(Student.class);
Kriterium kriterium = Expression.isNull("name");
criteria.add(criterion).list();
och använda mellan... och tid
Kriterier =session.createCriteria(Student.class);
Kriterium kriterium1 = Expression.ge("ålder", nytt heltal(20)); Nedre gräns
Kriterium kriterium2 = Uttryck.le("ålder",nytt heltal(25)); Tak
//这里也可以把上述两个条件添加到第三个条件里
Kriterium kriterium3 =Uttryck.och(kriterium1,kriterium2);
criteria.add(criterion3).list();
Motsvarar från studenter där åldern är mellan 20 och 25 år
Ekvivalent med från Student s där s.age >= 20 och s.age <=25


Följande är en jämförelse av de vanligt använda frågevillkoren för HQL och QBC
Uttryck som betyder HQL QBC
större än eller lika med > = Expression.ge()
Större än > Expression.gt()
Mindre än eller lika med < = Expression.le()
Mindre än < Expression.lt()
equals = Expression.eq()
är inte lika med <>eller!= Expression.ne()

Null är null Expression.isNull()
är notnull Expression.isNotNull()
Inom det angivna intervallet mellan och Expression.between()
Inte inom det angivna intervallet inte mellan och Expression.not(Expression.between())
Tillhör en samling i Expression.in()
Inte en del av en samling notin Expression.not(Expression.in())
och expression.and()
eller Expression.or()
Inte Expression.not()
Fuzzy query som Expression.like



1. Skapa en Criteria-instans net.sf.hibernate.Criteria Detta gränssnitt representerar en fråga för en specifik persistensklass. Session är fabriken som används för att tillverka Criteria-instansen.



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


crit.setMaxResults(50);


List cats = crit.list();


2. Begränsa omfattningen av resultatmängden Ett frågevillkor (Criterion) är en instans av gränssnittet net.sf.hibernate.expression.Criterion. Klassen net.sf.hibernate.expression.Expression definierar för att få vissa inbyggda Criterion-typer.


List cats = sess.createCriteria(Cat.class)


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


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


                .list();
Uttryck kan grupperas logiskt.

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.disjunktion()


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


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


                .add( Expression.eq("age", new Integer(1) ) )


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


                 .list();
Det finns många förgjorda villkorstyper (underklasser av uttryck). Det finns en särskilt användbar som låter dig bädda in SQL direkt.

List cats = sess.createCriteria(Cat.class)



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


                .list();  
där {alias} är en platshållare, kommer den att ersättas av radaliaset för den efterfrågade enheten. (Original: {alias}-platshållaren måste ersättas av radaliaset för den efterfrågade enheten.)


3. Sortera resultaten Du kan använda net.sf.hibernate.expression.Order för att sortera resultatmängden.


List cats = sess.createCriteria(Cat.class)



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


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


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


                .setMaxResults(50)


                .list();


4. Associationer Du kan använda createCriteria() mellan associationer för att enkelt specificera begränsningar mellan entiteter med relationer.

List cats = sess.createCriteria(Cat.class)



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


                 .createCriteria("kittens")


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


                 .list();


Observera att den andra createCriteria() returnerar en ny instans av Criteria, som pekar på ett element i kattungens samlingsklass. Följande alternativa former är användbara i specifika situationer.


List cats = sess.createCriteria(Cat.class)


                .createAlias("kittens", "kt")


                .createAlias("mate", "mt")


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


                .list();


(createAlias()) skapar inte en ny instans av Criteria. Observera att kattungesamlingsklassen som hålls av Cat-instansen i de två föregående frågorna inte är förfiltrerad av kriterier! Om du vill returnera endast kattungar som uppfyller kriterierna måste du använda returnMaps().


List cats = sess.createCriteria(Cat.class)


.createCriteria("kittens", "kt")


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


.returnMaps()


.list();


Iterator iter = cats.iterator();


medan (iter.hasNext())


{  


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


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


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


}


5. Dynamisk kopplingshämtning Du kan ändra den automatiska hämtningspolicyn för associationsobjekt genom att sätta FetchMode() vid körning.



List cats = sess.createCriteria(Cat.class)


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


                .setFetchMode("mate", FetchMode.EAGER)


                .list();


Denna fråga kommer att få både partner och kattungar via yttre anslutning.


6. Enligt klassen Example queries net.sf.hibernate.expression.example, kan du skapa frågevillkor från den angivna instansen.


Katt = ny katt (KATT();


cat.setSex('F');


cat.setColor(Color.BLACK);


Listaresultat = session.createCriteria(Cat.class)


                    .add( Example.create(cat) )


                    .list();
Versionsegenskaper, representationsegenskaper och associationer ignoreras alla. Som standard är även nullattribut uteslutna. Du kan justera hur exemplet används. Du kan
för att justera hur exemplet tillämpas. Exempel exempel = Example.create(cat) .exludeZeroes() //uteslut nollvärda egenskaper


.exludeProperty("color") //uteslut egenskapen "color" .ignoreCase() //utför jämförelser av veräustivt känsliga strängar


.enableLike(); Användning av Like för strängjämförelser


Listaresultat = session.createCriteria(Cat.class)


                      .add(exempel)


                      .list();
Du kan till och med använda exempel för att fastställa kriterier för associerade objekt. Listresultat = session.createCriteria(Cat.class) .add(Example.create(cat) )


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


Referenskoden är följande:






Föregående:LINQ vänster, höger och inre anslutningar
Nästa:Skillnaden mellan let och var-definitionsvariabler i js
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com