Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 16672|Antwoord: 0

[Bron] Het gedetailleerde gebruik van createCriteria is de QBC-query in Hibernate

[Link kopiëren]
Geplaatst op 09-08-2017 14:26:13 | | |

Stel nu dat er een Student-klasse is met id-, naam- en leeftijdsattributen
String hql = "van Student s";
Zoals we vroeger deden, doen we dat meestal
Query query = session.createQuery(hql);
Of als je wilt zoeken volgens de voorwaarden.
String hql = "van Student s waar s.name zoals 'King%'"
Query query = session.createQuery(hql);
Als je QBC gebruikt in plaats van HQL, dan is de code:
Criteria criteria =session.createCriteria(Student.class);
Criteriumcriterium = Uitdrukking.like("naam","koning%");
Ik kan het niet zo zien. Vervolgens voegen we de zoekvoorwaarde toe aan de leeftijd van 22.
HQL:
String hql = "van Student s waarbij s.name zoals 'Wang%' en s.age= 22 ";
Query query = session.createQuery(hql);
List list = query.list();
QBC:
Criteria criteria =session.createCriteria(Student.class);
Criteriumcriterium1 = Uitdrukking.like("naam","koning%");
Criteriumcriterium2 = Expression.eq("age",newInteger(22));
criteria.add(criterium1).add(criterium2);
Lijstlijst = criteria.list();


Het ziet er veel omslachtiger uit. Maar iedereen die een project heeft gedaan, weet dat wanneer de bedrijfslogica van een module verandert, het vaak SQL moet herschrijven, en het meest irritante en irritante is het nemen van iemand anders' HQL of SQL.
Als je QBC gebruikt, verhoogt dat de leesbaarheid en onderhoudbaarheid van de code aanzienlijk.
Het is belangrijk op te merken dat de nulwaarde de waarde is
Als we bijvoorbeeld een Student-object met een nullnaam willen vinden, moeten we het zo schrijven
Criteria criteria =session.createCriteria(Student.class);
Criteriumcriterium = Expression.isNull("name");
criteria.add(criterion).list();
en gebruiken tussen... en tijd
Criteria criteria =session.createCriteria(Student.class);
Criteriumcriterium1 = Expression.ge("leeftijd", nieuw geheel getal(20)); Ondergrens
Criteriumcriterium2 = Uitdrukking.le("leeftijd",nieuw geheel getal(25)); Plafond
//这里也可以把上述两个条件添加到第三个条件里
Criteriumcriterium3 =Expressie.en(criterium1,criterium2);
criteria.add(criterion3).list();
Gelijk aan studenten met een leeftijd tussen 20 en 25
Equivalent aan van Student s waarbij s.age >= 20 en s.age <=25


Hieronder volgt een vergelijking van de veelgebruikte queryvoorwaarden van HQL en QBC
Expressie die HQL QBC betekent
groter dan of gelijk aan > = Expression.ge()
Groter dan > Expression.gt()
Minder dan of gelijk aan < = Expression.le()
Minder dan < Expression.lt()
gelijk = Expression.eq()
is niet gelijk aan <>of!= Expression.ne()

Null is null Expression.isNull()
is notnull Expression.isNotNull()
Binnen het opgegeven bereik tussenen en Expression.between()
Niet in het opgegeven bereik niet tussenen en Expression.not(Expression.between())
Behorend tot een collectie in Expression.in()
Niet onderdeel van een collectie notin Expression.not(Expression.in())
en expressie.en()
of Expression.or()
Not Expression.not()
Fuzzy query zoals Expression.like



1. Maak een Criteria-instantie net.sf.hibernate.Criteria Deze interface vertegenwoordigt een query voor een specifieke persistentieklasse. Session is de fabriek die wordt gebruikt om de Criteria-instantie te produceren.



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


crit.setMaxResults(50);


List cats = crit.list();


2. Verklein de reikwijdte van de resultaatset Een queryvoorwaarde (Criterion) is een instantie van de net.sf.hibernate.expression.Criterion-interface. De klasse net.sf.hibernate.expression.Expression definieert om enkele ingebouwde Criterion-types te verkrijgen.


List cats = sess.createCriteria(Cat.class)


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


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


                .list();
Uitdrukkingen kunnen logisch worden gegroepeerd.

List cats = sess.createCriteria(Cat.class)



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


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


                .list();


List cats = sess.createCriteria(Cat.class)


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


                .add( Expression.disjunctioun()


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


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


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


                .add( Expression.eq ("age", nieuw Integer(2) ) ) ) )


                 .list();
Er zijn veel vooraf gemaakte conditietypen (subklassen van expressies). Er is een bijzonder nuttige waarmee je SQL direct kunt inbedden.

List cats = sess.createCriteria(Cat.class)



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


                .list();  
waarbij {alias} een tijdelijke vervanger is, wordt deze vervangen door de regelalias van de geraadpleegde entiteit. (Origineel: De {alias}-plaatshouder moet worden vervangen door de rijalias van de geraadpleegde entiteit.)


3. Sorteer de resultaten Je kunt net.sf.hibernate.expression.Order gebruiken om de resultaatset te sorteren.


List cats = sess.createCriteria(Cat.class)



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


                .addOrder( Order.asc("naam"))


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


                .setMaxResults(50)


                .list();


4. Associaties Je kunt createCriteria() tussen associaties gebruiken om eenvoudig beperkingen te specificeren tussen entiteiten met relaties.

List cats = sess.createCriteria(Cat.class)



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


                 .createCriteria("kittens")


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


                 .list();


Let op dat de tweede createCriteria() een nieuwe instantie van Criteria teruggeeft, die verwijst naar een element van de kittens collection-klasse. De volgende alternatieve vormen zijn nuttig in specifieke situaties.


List cats = sess.createCriteria(Cat.class)


                .createAlias("kittens", "kt")


                .createAlias("mate", "mt")


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


                .list();


(createAlias()) maakt geen nieuwe instantie van de Criteria aan. Let op: de kittens-verzamelklasse die door de Cat-instantie in de vorige twee zoekopdrachten wordt gehouden, is niet vooraf gefilterd door criteria! Als je alleen kittens wilt terugbrengen die aan de criteria voldoen, moet je returnMaps() gebruiken.


List cats = sess.createCriteria(Cat.class)


.createCriteria("kittens", "kt")


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


.returnMaps()


.list();


Iterator iter = cats.iterator();


terwijl (iter.hasNext())


{  


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


Kat kat = (Kat) map.get(Criteria.ROOT_ALIAS);


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


}


5. Dynamische associatie-ophaling Je kunt het automatische ophaalbeleid van associatieobjecten wijzigen door FetchMode() tijdens runtime in te stellen.



List cats = sess.createCriteria(Cat.class)


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


                .setFetchMode("mate", FetchMode.EAGER)


                .list();


Deze vraag zal zowel partner als kittens via outer join krijgen.


6. Volgens de Voorbeeldqueries net.sf.hibernate.expression.Example-klasse kun je queryvoorwaarden creëren vanuit de gespecificeerde instantie.


Kat kat = nieuwe Kat();


kat.setSex('F');


cat.setColor(Color.ZWART);


Lijstresultaten = session.createCriteria(Cat.class)


                    .add( Example.create(cat) )


                    .list();
Versie-eigenschappen, representatie-eigenschappen en associaties worden allemaal genegeerd. Standaard worden null-attributen ook uitgesloten. Je kunt aanpassen hoe het voorbeeld wordt toegepast. U kunt
om aan te passen hoe het voorbeeld wordt toegepast. Voorbeeldvoorbeeld = Example.create(cat) .excludeZeroes() //exclude nulwaardige eigenschappen


.excludeProperty("color") //sluit de eigenschap genaamd "color" uit .ignoreCase() //voer hoofdval-ongevoelige stringvergelijkingen uit


.enableLike(); Gebruik Like voor stringvergelijkingen


Lijstresultaten = session.createCriteria(Cat.class)


                      .add(voorbeeld)


                      .list();
Je kunt zelfs voorbeelden gebruiken om criteria vast te stellen voor bijbehorende objecten. Lijstresultaten = session.createCriteria(Cat.class) .add(Example.create(cat) )


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


De referentiecode is als volgt:






Vorig:LINQ links, rechts en binnenverbindingen
Volgend:Het verschil tussen let en var-definitievariabelen in js
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com