1 / 50

Hibernate zapytania

Hibernate zapytania. Zapytania w Hibernate. Zapytania w języku HQL (Hibernate Query Language) Zapytania poprzez obiekty Criteria Zapytania poprzez obiekty Example Zapytania w natywnym SQL Filtry. 2. EJB QL -selekcja. Wyszukiwanie encji w kontekście

arlene
Télécharger la présentation

Hibernate zapytania

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Hibernate zapytania

  2. Zapytania w Hibernate • Zapytania w języku HQL (Hibernate Query Language) • Zapytania poprzez obiekty Criteria • Zapytania poprzez obiekty Example • Zapytania w natywnym SQL • Filtry Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 2

  3. EJB QL -selekcja • Wyszukiwanie encji w kontekście EJB QL ::= <select_clause> <from_clause> [<where_clause>] [<groupby_clause>] [<having_clause>] [<orderby_clause>] • Przykład: select uzytkownik from Uzytkownik uzytkownik where uzytkownik.id = 21 Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego 3

  4. EJB QL -selekcja (II) select uzytkownik, pokoj from Uzytkownik uzytkownik, Pokoj pokoj where uzytkownik.klucz = pokoj.klucz select uzytkownik, szef from Uzytkownik uzytkownik, Uzytkownik szef where uzytkownik.szef = szef Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  5. Przykład zapytania (I) Query query = session.creatQuery("select u from Uzytkownik u where u.id = 21"); List uzytkownicy = query.list(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  6. Przykład zapytania (II) from Uzytkownik uzytkownik where uzytkownik.imie like ‘ma%’ select uzytkownik.imie from Uzytkownik uzytkownik where uzytkownik.imie like ‘ma%’ ' Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  7. Wykorzystanie parametru Query query = session.createQuery("select u from Uzytkownik u where u.imie = :imie"); query.setParameter(”imie", ”Jan"); List uzytkownik = query.list(); Query query = session.createQuery("select u from Uzytkownik u where u.imie = ?1"); query.setParameter(1, ”Jan"); List uzytkownik = query.list(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  8. Większa liczba warunków (I) Object[] parametry = new Object[liczba_parametrow]; int i=0; String Zapytanie = "from Uzytkownik as u1 where "; if (imie !=null && !imie.equals("")) { parametry[i] = "%" + imie + "%"; ++i; Zapytanie = Zapytanie + "imie like ? and "; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  9. Większa liczba warunków (II) if (nazwisko !=null && !nazwisko.equals("")) { parametry[i] = "%"+nazwisko+"%"; ++i; Zapytanie = Zapytanie + "nazwisko like ? and "; } if (pokoj !=null && !pokoj.equals("")) { parametry[i] = pokoj; ++i; Zapytanie = Zapytanie + "biuro.id = ? "; } ArrayList<Uzytkownik> u = (ArrayList<Uzytkownik>) getHibernateTemplate().find(Zapytanie,parametry); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  10. Inne zapytania from Uzytkownik u where u.imie in ( ’Marek', ’Bartosz', ’Piotr' ) from Uzytkownik u where u.imie not in ( ’Marek', ’Bartosz', ’Piotr' ) from Uzytkownik u where u.dzieci.size > 2 from Uzytkownik u where u.data > current_date from java.lang.Object o Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  11. Liczebność public Long count() { List list = (List) getHibernateTemplate().find("select count(*) from Uzytkownik"); Long count = (Long) list.get(0); return count; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  12. Element maksymalny public Integer max() { Integer max = 0; List list = (List) getHibernateTemplate().find("select max(u.id) from Uzytkownik u"); if (list!=null) max = (Integer) list.get(0); return max; } • max, min, avg, sum, count Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  13. Funkcje agregujące (I) Query query = session.createQuery( "SELECT u.imie, count(*) FROM Uzytkownik AS u"); List results = query.list( ); Iterator it = results.iterator( ); while (it.hasNext( )) { Object[] result = (Object[]) it.next( ); String first = (String)result[0]; Integer count = (Integer)result[1]; } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  14. Funkcje agregujące (II) select new list(u.imie, u.nazwisko) from Uzytkownik u select new Podpis(u.imie, u.nazwisko) from Uzytkownik u Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  15. Aktualizowanie Query q = session.createQuery("update Uzytkownik u set u.zarobki = u.zarobki * 1.10"); int updateCount = q.executeUpdate(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  16. Usuwanie Query q = session.createQuery("delete from Uzytkownik u where u.fulfilledDate != null"); int deleteCount = q.executeUpdate(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  17. Asocjacje • inner join • left outer join • right outer join • full join from Uzytkownik as uzytkownik inner join uzytkownik.adres as adres select u.imie a.ulica from Uzytkownik as u inner join u.adres as a Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  18. Asocjacje from Wypozyczenie w left join w.uzytkownik u where u.plec = 0 left join Uzytkownik u on (w.uzytkownik_id = u.id) from Uzytkownik as uzytkownik left outer join uzytkownik.dzieci as dziecko with dziecko.wiek < 10 Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  19. Sortowanie from Uzytkownik u order by u.imie asc, u.wzrost desc, u.dataUrodzenia Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  20. Grupowanie select u.plec, sum(u.placa), count(u) from Uzytkownik u group by u.plec Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  21. Sortowanie po rozmiarze kolekcji select uzytkownik.id, uzytkownik.imie from Uzytkownik as uzytkownik left join uzytkownik.dzieci as dziecko group by uzytkownik.id, uzytkownik.imie order by count(dziecko) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  22. Podzapytania (I) Select uzytkownik from Uzytkownik as uzytkownik where uzytkownik.placa > (select avg(u.placa) from Uzytkownik u) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  23. Podzapytania (II) from Uzytkownik u where not exists ( from Uzytkownik as u2 where u2.szef = u ) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  24. Podzapytania (III) from Uzytkownik as uzytkownik where uzytkownik.pesel not in //any, some ( select t.nazwa from TypoweImiona as t ) from Uzytkownik as uzytkownik where uzytkownik.placa > all (select u.placa from Uzytkownik u where u.wiek > 50) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  25. Stronicowanie session.createQuery(”from Uzytkownik u where u.opis like :d") .setParameter("d", "tv") .setMaxResults(10) .setFirstResult(10) .list(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  26. Unikalne rezultaty Query query = session.createQuery( "SELECT u.imie FROM Uzytkownik AS u") .setMaxResults(100) .uniqueResult(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  27. Criteria Criteria criteria = session.createCriteria(Uzytkownik.class); criteria.setMaxResults(50); List uzytkownik = criteria.list(); List uzytkownicy = session.createCriteria(Uzytkownik.class) .add(Restrictions.like(”imie", ”Ma%") ) .list(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  28. Restrictions List uzytkownicy = session.createCriteria(Uzytkownik.class) .add( Restrictions.like(”imie", ”Ma%") ) .add( Restrictions.or( Restrictions.eq( ”wiek", new Integer(30) ), Restrictions.isNull(”wiek"))).list(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  29. Wyszukiwanie według kryteriów (I) public ArrayList<Uzytkownik> findByCriteria(UzytkownikCriteria uzytkownikPreselection) { if (uzytkownikPreselection == null) return null; Session session; session = sessionFactory().getCurrentSession(); Criteria uzytkownikCriteria = session.createCriteria(Uzytkownik.class); ...... Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  30. Wyszukiwanie według kryteriów (II) addLikeRestrictionTextLike(uzytkownikCriteria, "imie", uzytkownikPreselection.getImie()); addLikeRestrictionTextLike(uzytkownikCriteria, "nazwisko", uzytkownikPreselection.getNazwisko()); uzytkownikCriteria.setResultTransformer( Criteria.DISTINCT_ROOT_ENTITY); return (ArrayList<Uzytkownik>) uzytkownikCriteria.list(); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  31. Wyszukiwanie według kryteriów (III) Criteria pokojCriteria = uzytkownikCriteria.createCriteria(”pokoj",Criteria.LEFT_JOIN); addLikeRestrictionText(pokojCriteria, ”nazwa", uzytkownikPreselection.getPokojNazwa()); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  32. Wyszukiwanie po zawartości pola tekstowego private void addLikeRestrictionText(Criteria criteria, String propertyName, String keywords) { if (!StringUtils.hasText(keywords)) return; Junction junc = Restrictions.disjunction(); junc.add(Restrictions.ilike(propertyName,keywords)); criteria.add(junc); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  33. Wyszukiwanie po zawartości pola tekstowego • private void addLikeRestrictionTextLike(Criteria criteria, String propertyName, String keywords) { if (!StringUtils.hasText(keywords)) return; String[] keywordList = keywords.split("\\s"); Junction junc = Restrictions.disjunction(); for (String word : keywordList) junc.add(Restrictions.ilike(propertyName, '%' + word + '%')); criteria.add(junc); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  34. Wyszukiwanie w przedziale wartości private void addLikeRestrictionInter(Criteria criteria, String propertyName, int Wartoscod, int Wartoscdo) { Junction junc = Restrictions.disjunction(); junc.add(Restrictions.between(propertyName, Wartoscod, Wartoscdo)); criteria.add(junc); } criteria.add(Restrictions.le(getProperty(), dateEnd.getTime())); criteria.add(Restrictions.ge(getProperty(), dateStart.getTime())); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  35. Wyszukiwanie po wartości private void addLikeRestrictionId(Criteria criteria, Object value) { Junction junc = Restrictions.disjunction(); junc.add(Restrictions.idEq(value)); criteria.add(junc); } junc.add(Restrictions.Eq(propertyName,value)); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  36. Wyszukiwanie na podstawie listy criteria.add(Restrictions.in(getProperty(), list)); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  37. Wyszukiwanie po zajętości pola (I) private void addLikeRestrictionisNotNull(Criteria criteria, String propertyName) { Junction junc = Restrictions.disjunction(); junc.add(Restrictions.isNotNull(propertyName)); criteria.add(junc); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  38. Wyszukiwanie po zajętości pola (II) private void addLikeRestrictionisNull(Criteria criteria, String propertyName) { Junction junc = Restrictions.disjunction(); junc.add(Restrictions.isNull(propertyName)); criteria.add(junc); } Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  39. Sortowanie List uzytkownicy = session.createCriteria(Uzytkownik.class) .add( Restrictions.like(”imie", ”M%") .addOrder( Order.asc(”imie") ) .addOrder( Order.desc(”wiek") ) .setMaxResults(30) .list(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  40. Projection List results = session.createCriteria(Uzytkownik.class) .setProjection( Projections.projectionList() .add( Projections.rowCount() ) .add( Projections.avg(”placa") ) .add( Projections.max(”placa") ) .add( Projections.groupProperty(”plec") )) .list(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  41. DetachedCriteria (I) DetachedCriteria query = DetachedCriteria.forClass(Uzytkownik.class) .add( Property.forName(”wiek").eq(30) ); Session session = ....; Transaction txn = session.beginTransaction(); List results = query.getExecutableCriteria(session).list(); txn.commit(); session.close(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  42. DetachedCriteria (II) DetachedCriteria avgPlaca = DetachedCriteria.forClass(Uzytkownik.class) .setProjection( Property.forName(”placa").avg() ); session.createCriteria(Uzytkownik.class) .add( Property.forName(”placa").gt(avgPlaca) ) .list(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  43. Wyszukiwanie przez przykład Uzytkownik uzytkownik = new Uzytkownik(); uzytkownik.setImie(’Marek'); uzytkownik.setWiek(30); List results = session.createCriteria(Uzytkownik.class) .add( Example.create(uzytkownik) ) .list(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  44. Zapytania w SQL (I) session.createSQLQuery("SELECT * FROM UZYTKOWNIK").list(); session.createSQLQuery("SELECT ID, IMIE, DATAURODZENIA FROM UZYTKOWNIK").list(); • zwracana wartość: Lista Object[] Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  45. Zapytania w SQL (II) session.createSQLQuery("SELECT * FROM UZYTKOWNIK") .addScalar("ID", Hibernate.LONG) .addScalar(”IMIE", Hibernate.STRING) .addScalar(”DATAURODZENIA", Hibernate.DATE) sess.createSQLQuery("SELECT * FROM UZYTKOWNIK").addEntity(Uzytkownik.class); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  46. Zapytania w SQL (III) query = session.createSQLQuery("SELECT * FROM UZYTKOWNIK WHERE IMIE like:imie") .addEntity(Uzytkownik.class); List uzytkownicy = query.setString(”imie", ”Ma%").list(); Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  47. Iterate Query Iterator iterator = session.createQuery("from Ksiazka k order by k.numer").iterate(); while ( iterator.hasNext() ) { Ksiazka k = (Ksiazka) iterator.next(); if ( ksiazka.wyszukiwanie(„slowo”) ) { iterator.remove(); break; }} Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  48. @Formula @Formula ("imie||' '||nazwisko") String Label; @Formula ("(select w.datawypozyczenia from Wypozyczenie w where w.ksiazka_id = id and w.datazwrotu is null)") private Date dataOstatniegoWypozyczenia; INTERVAL(0) Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  49. Filtr (I) @FilterDefs( { @FilterDef( name = "aktywny", parameters = @ParamDef( type = "boolean", name = "active")) }) @Entity @Filters( { @Filter( name = "aktywny", condition = "aktywny = :active") }) public class uzytkownik { .... Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

  50. Filtr (II) session.enableFilter(”aktywny") .setParameter(”active", true); session.createQuery .... session.getEnableFilter(”aktywny") session.disableFilter(”aktywny") Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

More Related