Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Criteria Når og hvorfor bruke Criteria i Hibernate.

Liknende presentasjoner


Presentasjon om: "Criteria Når og hvorfor bruke Criteria i Hibernate."— Utskrift av presentasjonen:

1 Criteria Når og hvorfor bruke Criteria i Hibernate

2 Hva er Criteria Et alternativ til HQL Representerer en spørring mot en enkelt, persistent klasse Innsnevring av søket ved å legge til restriksjoner (Restrictions)

3 Hvorfor Criteria? Gi renere Java-kode ved et avansert søk Bedre støtte for unike resultater ved mange foreninger av andre tabeller

4 SQL vs HQL vs. Criteria Alle rader SQL SELECT * FROM user; HQL Query query = getSession().createQuery(”from User”); Criteria Criteria criteria = getSession.createCriteria(User.class);

5 SQL vs HQL vs. Criteria (frts.) Alle rader med e-post lik … SQL SELECT * FROM user WHERE email = ?; HQL Query query = getSession().createQuery(”from User u where u.email = :email”); query.setParameter(”email”, email); Criteria Criteria criteria = getSession.createCriteria(User.class); If (email != null && email.length() > 0) critera.add(Restriction.eq(”email”, email);

6 Så hva er ”greia”? What’s the big deal, lizm..? For enklere spørringer gir det tyngre syntaks. Bruk HQL! For kompliserte spørringer er det motsatt. Eksempel på HQL følger:

7 Eksempel på tyngre HQL String hql = ”from Project p where lower(p.title) like lower (:searchString) or lower (p.user.unit) like lower (:searchString) or lower (p.user.fullname) like lower (:searchString)”; if (fromDate != null) hql += ” and p.dateRegistered > :fromDate”; If (toDate != null) hql += ” and p.dateRegistered < :toDate”; Query query = getSession.createQuery(hql); query.setParameter(”searchString”, ”%” + searchString + ”%”; if (fromDate != null) query.setParameter(”fromDate”, fromDate); if (toDate != null) query.setParameter(”toDate”, toDate);

8 Oversatt til Criteria Criteria criteria = getSession().createCriteria(Project.class); criteria.addAlias(”user”, u); criteria.add(Restriction.disjunction().add(Restriction.ilike(”title”, searchString, MatchMode.ANYWHERE)).add(Restriction.ilike(”u.unit”, searchString, MatchMode.ANYWHERE)).add(Restriction.ilike(”u.fullname”, searchString, MatchMode.ANYWHERE))); if (fromDate != null) criteria.add(Restriction.gt(”dateRegistered”, fromDate); If (toDate != null) criteria.add(Restriction.lt(”dateRegistered”, toDate);

9 Når brukes Criteria? Når en ellers må bygge opp HQL-strengen med mange parametere, ved ”hql += …” Ved komplekse AND- og OR-søk blandet Når en ønsket et unikt resultat fra forening med mange andre tabeller. HQL støtter ikke dette. Criteria: criteria.setResultTransformer( Criteria.DISTINCT_ROOT_ENTITY);

10 Ikke overbevist? Q: Criteria er mye tyngre enn HQL A: Ja! Q: Og derfor? A: Vel, hvis du synes det er bedre å lese følgende kode, så og ahead! Og husk at du i tillegg må implementere fjerning av dupliserte rader fra resultatet ved forening av mange tabeller!

11 For de HQL-frelste tring hql = "select project from Project project join project.user user where \n" + "( lower(project.title) like lower(:searchString) \n" + " or lower(user.unit) like lower(:searchString) \n" + " or lower(user.fullname) like lower(:searchString) ) \n"; if (doBothDateSearch) { hql = hql + " and ( project.dateRegistered > :fromDate \n"; hql = hql + " and project.dateRegistered :fromDate \n"; } if (doToDateSearch) { hql = hql + " and project.dateRegistered < :toDate \n"; } if (infoDelivered == true) { hql = hql + " and lower(project.informationDelivered) like 'ja' \n"; } if (students) { hql = hql + " and 1 member of project.categories \n"; } if (employees) { hql = hql + " and 2 member of project.categories \n"; } if (others) { hql = hql + " and 3 member of project.categories \n"; } Query query = getSession().createQuery(hql); query.setParameter("searchString", "%" + searchString + "%"); if (doBothDateSearch) { query.setParameter("fromDate", fromDate); query.setParameter("toDate", toDate); } if (doFromDateSearch) { query.setParameter("fromDate", fromDate); } if (doToDateSearch) { query.setParameter("toDate", toDate); }


Laste ned ppt "Criteria Når og hvorfor bruke Criteria i Hibernate."

Liknende presentasjoner


Annonser fra Google