Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 16672|Отговор: 0

[Източник] Детайлното използване на createCriteria е QBC заявката в Hibernate

[Копирай линк]
Публикувано в 9.08.2017 г. 14:26:13 ч. | | |

Сега да кажем, че има клас Student с атрибути id, име, възраст
String hql = "от ученик s";
Както правехме преди, обикновено правим
Query query = session.createQuery(hql);
Или ако искате да търсите според условията.
String hql = "от Student s, където s.name като 'King%'"
Query query = session.createQuery(hql);
Ако използвате QBC вместо HQL, тогава кодът е:
Критерии =session.createCriteria(Student.class);
критерий на критерий = Expression.like("име", "крал%");
Не мога да го видя така. След това добавяме условието за търсене към възрастта 22.
HQL:
String hql = "от Student s, където s.name като 'Wang%' и s.age= 22";
Query query = session.createQuery(hql);
List list = query.list();
QBC:
Критерии =session.createCriteria(Student.class);
критерий на критерия1 = Expression.like("име", "крал%");
критерий на критерий2 = Expression.eq("възраст", newInteger(22));
criteria.add(критерий1).add(критерий2);
List list = criteria.list();


Изглежда много по-тромаво. Но всеки, който е правил проект, знае, че когато бизнес логиката на модула се промени, често трябва да се пренапише SQL, а най-досадното и досадно е да вземеш чужда HQL или SQL.
Ако използвате QBC, това значително увеличава четимостта и поддържаемостта на кода.
Важно е да се отбележи, че нулевата стойност е стойността
Например, когато искаме да намерим обект Student с null име, трябва да го напишем така
Критерии =session.createCriteria(Student.class);
Критерий = Expression.isNull("име");
criteria.add(criterion).list();
и използване между... и време
Критерии =session.createCriteria(Student.class);
критерий на критерия1 = Expression.ge("възраст"), ново цяло число(20)); Долна граница
Criterion criterion2 = Expression.le("възраст",ново цяло число(25)); Таван
//这里也可以把上述两个条件添加到第三个条件里
критерий на критерий 3 =Expression.and(критерий 1,критерий 2);
criteria.add(criterion3).list();
Еквивалент на Student S, където възрастта е между 20 и 25 години
Еквивалентно на от Student s, където s.възраст >= 20, а s.възраст <=25


Следва сравнение на често използваните условия за заявки HQL и QBC
Израз, означаващ HQL QBC
по-голямо или равно на > = Expression.ge()
По-голямо от > Expression.gt()
По-малко или равно на < = Expression.le()
По-малко от < Expression.lt()
равно = Expression.eq()
не е равно на <>или!= Expression.ne()

Null е null Expression.isNull()
е notnull Expression.isNotNull()
В рамките на зададения диапазон между и Expression.between()
Не е в посочения диапазон не е между и Expression.not(Expression.between())
Принадлежаща към колекция в Expression.in()
Не е част от колекция notin Expression.not(Expression.in())
и изразяване.and()
или Expression.or()
Не Expression.not()
Неясна заявка като Expression.like



1. Създайте инстанция на Criteria net.sf.hibernate. Критерии Този интерфейс представлява заявка за конкретен клас на персистентност. Session е фабриката, използвана за производство на инстанцията Criteria.



Критерий crit = sess.createCriteria(Cat.class);


crit.setMaxResults(50);


List cats = crit.list();


2. Стесняване на обхвата на набора от резултати Условие за заявка (Criterion) е инстанция на интерфейса net.sf.hibernate.expression.Criterion. Класът net.sf.hibernate.expression.expression.Expression дефинира, за да получи някои вградени типове Criterion.


List cats = sess.createCriteria(Cat.class)


                .add( Expression.like("име", "Fritz%") )


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


                .list();
Изразите могат логично да бъдат групирани.

List cats = sess.createCriteria(Cat.class)



                .add( Expression.like("име", "Fritz%") )


                .add( Expression.or( Expression.eq( "възраст", ново цяло число(0)), Expression.isNull("възраст")))


                .list();


List cats = sess.createCriteria(Cat.class)


                .add( Expression.in( "име",нова струна[]{"Fritz","Izi","Pk"}))


                .add( Expression.disjunction()


                .add( Expression.isNull("възраст") )


                .add( Expression.eq("възраст", ново цяло число(0)) )


                .add( Expression.eq("възраст", ново цяло число(1)) )


                .add( Expression.eq("възраст", ново цяло число(2) ) ) ) )


                 .list();
Има много предварително създадени типове условия (подкласове на изрази). Има особено полезен, който позволява директно да вградите SQL.

List cats = sess.createCriteria(Cat.class)



                .add( Expression.sql("по-ниско($alias.име) като по-ниско(?)", "Fritz%", Хибернация.STRING))


                .list();  
където {alias} е заместител, той ще бъде заменен с линейния алиас на заявкания обект. (Оригинал: Заместителят {alias} да бъде заменен с псевдоним на реда на запитваната единица.)


3. Сортирайте резултатите. Можете да използвате net.sf.hibernate.expression.Order, за да сортирате набора от резултати.


List cats = sess.createCriteria(Cat.class)



                .add( Expression.like("име", "F%")


                .addOrder( Order.asc("име"))


                .addOrder( Order.desc("възраст"))


                .setMaxResults(50)


                .list();


4. Асоциации Можете да използвате createCriteria() между асоциации, за да зададете лесно ограничения между обекти с връзки.

List cats = sess.createCriteria(Cat.class)



                 .add( Expression.like("име", "F%")


                 .createCriteria("котенца")


                 .add( Expression.like("име","F%")


                 .list();


Обърнете внимание, че вторият createCriteria() връща нова инстанция на Criteria, сочеща към елемент от класа kittens collection. Следните алтернативни форми са полезни в конкретни ситуации.


List cats = sess.createCriteria(Cat.class)


                .createAlias ("котенца", "kt")


                .createAlias ("mate", "mt")


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


                .list();


(createAlias()) не създава нов инстанция на Критериите. Имайте предвид, че класът за котенца, държан от котешката инстанция в предишните две заявки, не е предварително филтриран по критерии! Ако искате да върнете само котенца, които отговарят на критериите, трябва да използвате returnMaps().


List cats = sess.createCriteria(Cat.class)


.createCriteria("kittens", "kt")


.add( Expression.eq("име", "F%") )


.returnMaps()


.list();


Итератор iter = cats.iterator();


докато ( iter.hasNext())


{  


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


Котешка котка = (Котка) map.get(Criteria.ROOT_ALIAS);


Котешко котенце = (Котка) map.get("kt");


}


5. Динамично извличане на асоциации Можете да промените политиката за автоматично извличане на асоциационни обекти, като зададете FetchMode() по време на изпълнение.



List cats = sess.createCriteria(Cat.class)


                .add( Expression.like("име", "Fritz%") )


                .setFetchMode("mate", FetchMode.EAGER)


                .list();


Тази заявка ще получи както партньор, така и котенца чрез външно съединяване.


6. Според примерните заявки net.sf.hibernate.expression.Example клас, можете да създадете условия за заявка от зададения инстанс.


Котешка котка = нова котка();


cat.setSex('F');


cat.setColor(Color.BLACK);


Резултати от списъка = session.createCriteria(Cat.class)


                    .add( Example.create(cat) )


                    .list();
Свойствата на версиите, свойствата на представянето и асоциациите се игнорират. По подразбиране null атрибутите също са изключени. Можете да коригирате начина, по който се прилага примерът. Можеш
за да коригира начина, по който се прилага примерът. Пример = Example.create(cat) .excludeZeroes() //exclude свойства с нулева стойност


.excludeProperty("color") //exclude свойството с име "color" .ignoreCase() //perform сравнения на низове без значение на регистр


.enableLike(); Използвайте подобни за сравнение на низове


Резултати от списъка = session.createCriteria(Cat.class)


                      .add(пример)


                      .list();
Можете дори да използвате примери, за да установите критерии за свързаните обекти. Резултати от списъка = session.createCriteria(Cat.class) .add(Example.create(cat) )


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


Референтният код е следният:






Предишен:LINQ ляво, дясно и вътрешни връзки
Следващ:Разликата между променливите за дефиниция на let и var в js
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com