Title: Hibernate
1 2Zapytania w Hibernate
- Zapytania w jezyku HQL (Hibernate Query Language)
- Zapytania poprzez obiekty Criteria
- Zapytania poprzez obiekty Example
- Zapytania w natywnym SQL
- Filtry
2
3EJB QL -selekcja
- Wyszukiwanie encji w kontekscie
- EJB QL ltselect_clausegt ltfrom_clausegt
ltwhere_clausegt ltgroupby_clausegt
lthaving_clausegt ltorderby_clausegt - Przyklad
- select uzytkownik from Uzytkownik uzytkownik
where uzytkownik.id 21
3
4EJB 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
5Przyklad zapytania (I)
- Query query session.creatQuery("select u from
Uzytkownik u where u.id 21") - List uzytkownicy query.getResultList()
6Przyklad zapytania (II)
- from Uzytkownik uzytkownik where uzytkownik.imie
like ma - select uzytkownik.imie from Uzytkownik uzytkownik
where uzytkownik.imie like ma '
7Wykorzystanie 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")
- List uzytkownik query.getResultList()
8Wieksza liczba warunków (I)
- Object parametry new Objectliczba_parametrow
- int i0
- String Zapytanie "from Uzytkownik as u1 where
" - if (imie !null !imie.equals(""))
-
- parametryi "" imie "" i
- Zapytanie Zapytanie "imie like ? and "
-
9Wieksza liczba warunków (II)
- if (nazwisko !null !nazwisko.equals(""))
-
- parametryi ""nazwisko"" i
- Zapytanie Zapytanie "nazwisko like ? and "
-
- if (pokoj !null !pokoj.equals(""))
-
- parametryi pokoj i
- Zapytanie Zapytanie "biuro_id ? "
-
- ArrayListltUzytkownikgt u (ArrayListltUzytkownikgt)
getHibernateTemplate().find(Zapytanie,parametry)
10Inne 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 gt 2
- from Uzytkownik u where u.data gt current_date
- from java.lang.Object o
11Liczebnosc
- public Long count()
-
- List list (List) getHibernateTemplate().find("s
elect count() from Uzytkownik") -
- Long count (Long) list.get(0)
- return count
12Element maksymalny
- public Integer max()
-
- Integer max 0
-
- List list (List) getHibernateTemplate().find("s
elect - max(u.id) from Uzytkownik u")
-
- if (list!null) max (Integer) list.get(0)
- return max
-
- max, min, avg, sum, count
13Funkcje agregujace (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)result0
- Integer count (Integer)result1
14Funkcje agregujace (II)
- select new list(u.imie, u.nazwisko)
- from Uzytkownik u
- select new Podpis(u.imie, u.nazwisko)
- from Uzytkownik u
15Aktualizowanie
- Query q session.createQuery("update Uzytkownik
u - set u.zarobki u.zarobki 1.10")
- int updateCount q.executeUpdate()
16Usuwanie
- Query q session.createQuery("delete from
Uzytkownik u where u.fulfilledDate ! null") - int deleteCount q.executeUpdate()
17Asocjacje
- 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
18Asocjacje
- 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 lt 10
19Sortowanie
- from Uzytkownik u
- order by u.imie asc, u.wzrost desc,
u.dataUrodzenia
20Grupowanie
- select u.plec, sum(u.placa), count(u)
- from Uzytkownik u
- group by u.plec
21Sortowanie 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)
22Podzapytania (I)
- Select uzytkownik
- from Uzytkownik as uzytkownik
- where uzytkownik.placa gt
- (select avg(u.placa) from Uzytkownik u)
23Podzapytania (II)
- from Uzytkownik u
- where not exists
- (
- from Uzytkownik as u2 where u2.szef u
- )
24Podzapytania (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 gt
- all (select u.placa from Uzytkownik u
- where u.wiek gt 50)
25Stronicowanie
- session.createQuery(from Uzytkownik u where
u.opis like d") - .setParameter("d", "tv")
- .setMaxResults(10)
- .setFirstResult(10)
- .listResults()
26Unikalne rezultaty
- Query query session.createQuery(
- "SELECT u.imie FROM Uzytkownik AS u")
- .setMaxResults(100)
- .uniqueResult()
27Criteria
- Criteria criteria session.createCriteria(Uzytkow
nik.class) - criteria.setMaxResults(50)
- List uzytkownik criteria.list()
- List uzytkownicy session.createCriteria(Uzytkown
ik.class) - .add(Restrictions.like(imie", Ma") )
- .list()
28Restrictions
- List uzytkownicy session.createCriteria(Uzytkown
ik.class) - .add( Restrictions.like(imie", Ma") )
- .add( Restrictions.or(
- Restrictions.eq( wiek", new Integer(30) ),
- Restrictions.isNull(wiek"))).list()
29Wyszukiwanie wedlug kryteriów (I)
- public ArrayListltUzytkownikgt findByCriteria(Uzytko
wnikCriteria uzytkownikPreselection) -
-
- if (uzytkownikPreselection null) return null
- Session session
- session sessionFactory.getCurrentSession()
- Criteria uzytkownikCriteria session.createCriter
ia(Uzytkownik.class) - ......
30Wyszukiwanie wedlug kryteriów (II)
- addLikeRestrictionTextLike(uzytkownikCriteria,
"imie", uzytkownikPreselection.getImie()) - addLikeRestrictionTextLike(uzytkownikCriteria,
"nazwisko", uzytkownikPreselection.getNazwisko())
-
- uzytkownikCriteria.setResultTransformer(
- Criteria.DISTINCT_ROOT_ENTITY)
-
- return (ArrayListltUzytkownikgt) uzytkownikCriteria.
list()
31Wyszukiwanie wedlug kryteriów (III)
- Criteria pokojCriteria uzytkownikCriteria.create
Criteria(pokoj",Criteria.LEFT_JOIN) - addLikeRestrictionText(pokojCriteria, nazwa",
uzytkownikPreselection.getPokojNazwa())
32Wyszukiwanie po zawartosci 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,keyw
ords)) - criteria.add(junc)
33Wyszukiwanie po zawartosci 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)
34Wyszukiwanie w przedziale wartosci
- 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()))
35Wyszukiwanie po wartosci
- 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))
36Wyszukiwanie na podstawie listy
- criteria.add(Restrictions.in(getProperty(),
list))
37Wyszukiwanie po zajetosci pola
- private void addLikeRestrictionisNotNull(Criteria
criteria, String propertyName) -
- Junction junc Restrictions.disjunction()
- junc.add(Restrictions.isNotNull(propertyName))
- criteria.add(junc)
-
38Wyszukiwanie po zajetosci pola
- private void addLikeRestrictionisNull(Criteria
criteria, String propertyName) -
- Junction junc Restrictions.disjunction()
- junc.add(Restrictions.isNull(propertyName))
- criteria.add(junc)
39Sortowanie
- List uzytkownicy session.createCriteria(Uzytkown
ik.class) - .add( Restrictions.like(imie", M")
- .addOrder( Order.asc(imie") )
- .addOrder( Order.desc(wiek") )
- .setMaxResults(30)
- .list()
40Projection
- List results session.createCriteria(Uzytkownik.c
lass) - .setProjection( Projections.projectionList()
- .add( Projections.rowCount() )
- .add( Projections.avg(placa") )
- .add( Projections.max(placa") )
- .add( Projections.groupProperty(plec") ))
- .list()
41DetachedCriteria (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()
42DetachedCriteria (II)
- DetachedCriteria avgPlaca DetachedCriteria.forCl
ass(Uzytkownik.class) - .setProjection( Property.forName(placa").avg()
) - session.createCriteria(Uzytkownik.class)
- .add( Property.forName(placa").gt(avgPlaca) )
- .list()
43Wyszukiwanie przez przyklad
- Uzytkownik uzytkownik new Uzytkownik()
- uzytkownik.setImie(Marek')
- uzytkownik.setWiek(30)
- List results session.createCriteria(Uzytkownik.c
lass) - .add( Example.create(uzytkownik) )
- .list()
44Zapytania w SQL (I)
- session.createSQLQuery("SELECT FROM
UZYTKOWNIK").list() - session.createSQLQuery("SELECT ID, IMIE,
DATAURODZENIA FROM UZYTKOWNIK").list() - zwracana wartosc Lista Object
45Zapytania 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)
46Zapytania w SQL (III)
- query session.createSQLQuery("SELECT FROM
UZYTKOWNIK WHERE IMIE likeimie") - .addEntity(Uzytkownik.class)
- List uzytkownicy query.setString(imie",
Ma").list()
47Iterate 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_at_Formula
- _at_Formula ("imie' 'nazwisko")
- String Label
- _at_Formula ("(select w.datawypozyczenia from
Wypozyczenie w where w.ksiazka_id id and
w.datazwrotu is null)") - private Date dataOstatniegoWypozyczenia
- INTERVAL(0)
49Filtr (I)
- _at_FilterDefs(
- _at_FilterDef( name "aktywny", parameters
_at_ParamDef( type "boolean", name "active")) ) - _at_Entity
- _at_Filters(
- _at_Filter( name "aktywny",
- condition "aktywny active") )
- public class uzytkownik ....
50Filtr (II)
- session.enableFilter(aktywny")
- .setParameter(active", true)
- session.createQuery ....
- session.getEnableFilter(aktywny")
- session.disableFilter(aktywny")