Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Hibernate zapytania.

Podobne prezentacje


Prezentacja na temat: "Hibernate zapytania."— Zapis prezentacji:

1 Hibernate zapytania

2 Zapytania w języku HQL (Hibernate Query Language)
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

3 Wyszukiwanie encji w kontekście
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 3

4 EJB QL -selekcja (II) select uzytkownik from Uzytkownik uzytkownik, Pokoj pokoj where uzytkownik.klucz = pokoj.klucz select uzytkownik, szef from Uzytkownik uzytkownik, Uzytkownik szef where uzytkownik.szef = szef

5 Przykład zapytania (I)
Query query = session.creatQuery("select u from Uzytkownik u where u.id = 21"); List uzytkownicy = query.getResultList();

6 Przykład zapytania (II)
from Uzytkownik uzytkownik where uzytkownik.imie like ‘ma%’ select uzytkownik.imie from Uzytkownik uzytkownik where uzytkownik.imie like ‘ma%’ '

7 Wykorzystanie parametru
Query query = session.createQuery("select u from Uzytkownik u where u.imie = :imie"); query.setParameter(”imie", ”Jan"); List uzytkownik = query.getResultList(); Query query = session.createQuery("select u from Uzytkownik u where u.imie = ?1"); query.setParameter(1, ”Jan");

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 "; }

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);

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

11 Liczebność public Long count() {
List list = (List) getHibernateTemplate().find("select count(*) from Uzytkownik"); Long count = (Long) list.get(0); return count; }

12 Element maksymalny max, min, avg, sum, count public Integer max() {
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

13 Funkcje agregujące (I)
Query query = session.createQuery( "SELECT u.imie, count(*) FROM Uzytkownik AS u"); List results = query.getResultList( ); Iterator it = results.iterator( ); while (it.hasNext( )) { Object[] result = (Object[]) it.next( ); String first = (String)result[0]; Integer count = (Integer)result[1]; }

14 Funkcje agregujące (II)
select new list(u.imie, u.nazwisko) from Uzytkownik u select new Podpis(u.imie, u.nazwisko)

15 Aktualizowanie Query q = session.createQuery("update Uzytkownik u set u.zarobki = u.zarobki * 1.10"); int updateCount = q.executeUpdate();

16 Usuwanie Query q = session.createQuery("delete from Uzytkownik u where u.fulfilledDate != null"); int deleteCount = q.executeUpdate();

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

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

19 Sortowanie from Uzytkownik u order by u.imie asc, u.wzrost desc, u.dataUrodzenia

20 Grupowanie select u.plec, sum(u.placa), count(u) from Uzytkownik u group by u.plec

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)

22 Podzapytania (I) Select uzytkownik from Uzytkownik as uzytkownik where uzytkownik.placa > (select avg(u.placa) from Uzytkownik u)

23 Podzapytania (II) from Uzytkownik u where not exists ( from Uzytkownik as u2 where u2.szef = u )

24 Podzapytania (III) from Uzytkownik as uzytkownik where uzytkownik.pesel not in //any, some ( select t.nazwa from TypoweImiona as t ) where uzytkownik.placa > all (select u.placa from Uzytkownik u where u.wiek > 50)

25 Stronicowanie session.createQuery(”from Uzytkownik u where u.opis like :d") .setParameter("d", "tv") .setMaxResults(10) .setFirstResult(10) .listResults();

26 Unikalne rezultaty Query query = session.createQuery( "SELECT u.imie FROM Uzytkownik AS u") .setMaxResults(100) .uniqueResult();

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();

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();

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); ......

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(); }

31 Wyszukiwanie według kryteriów (III)
Criteria pokojCriteria = uzytkownikCriteria.createCriteria(”pokoj",Criteria.LEFT_JOIN); addLikeRestrictionText(pokojCriteria, ”nazwa", uzytkownikPreselection.getPokojNazwa());

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); }

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); }

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()));

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));

36 Wyszukiwanie na podstawie listy
criteria.add(Restrictions.in(getProperty(), list));

37 Wyszukiwanie po zajętości pola
private void addLikeRestrictionisNotNull(Criteria criteria, String propertyName) { Junction junc = Restrictions.disjunction(); junc.add(Restrictions.isNotNull(propertyName)); criteria.add(junc); }

38 Wyszukiwanie po zajętości pola
private void addLikeRestrictionisNull(Criteria criteria, String propertyName) { Junction junc = Restrictions.disjunction(); junc.add(Restrictions.isNull(propertyName)); criteria.add(junc); }

39 Sortowanie List uzytkownicy = session.createCriteria(Uzytkownik.class) .add( Restrictions.like(”imie", ”M%") .addOrder( Order.asc(”imie") ) .addOrder( Order.desc(”wiek") ) .setMaxResults(30) .list();

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();

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();

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();

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();

44 Zapytania w SQL (I) session.createSQLQuery("SELECT * FROM UZYTKOWNIK").list(); session.createSQLQuery("SELECT ID, IMIE, DATAURODZENIA FROM UZYTKOWNIK").list(); zwracana wartość: Lista Object[]

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);

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();

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; }}

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)

49 Filtr (I) @FilterDefs( { @FilterDef( name = "aktywny", parameters type = "boolean", name = "active")) }) @Entity @Filters( { @Filter( name = "aktywny", condition = "aktywny = :active") }) public class uzytkownik { ....

50 Filtr (II) session.enableFilter(”aktywny") .setParameter(”active", true); session.createQuery .... session.getEnableFilter(”aktywny") session.disableFilter(”aktywny")


Pobierz ppt "Hibernate zapytania."

Podobne prezentacje


Reklamy Google