Hibernate - PowerPoint PPT Presentation

About This Presentation
Title:

Hibernate

Description:

Hibernate zapytania Zapytania w Hibernate Zapytania w j zyku HQL (Hibernate Query Language) Zapytania poprzez obiekty Criteria Zapytania poprzez obiekty Example ... – PowerPoint PPT presentation

Number of Views:153
Avg rating:3.0/5.0
Slides: 51
Provided by: luxDmcsP
Category:
Tags: hibernate

less

Transcript and Presenter's Notes

Title: Hibernate


1
  • Hibernate
  • zapytania

2
Zapytania w Hibernate
  • Zapytania w jezyku HQL (Hibernate Query Language)
  • Zapytania poprzez obiekty Criteria
  • Zapytania poprzez obiekty Example
  • Zapytania w natywnym SQL
  • Filtry

2
3
EJB 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
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
Przyklad zapytania (I)
  • Query query session.creatQuery("select u from
    Uzytkownik u where u.id 21")
  • List uzytkownicy query.getResultList()

6
Przyklad 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")
  • List uzytkownik query.getResultList()

8
Wieksza 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 "

9
Wieksza 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)

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 gt 2
  • from Uzytkownik u where u.data gt current_date
  • from java.lang.Object o

11
Liczebnosc
  • public Long count()
  • List list (List) getHibernateTemplate().find("s
    elect count() from Uzytkownik")
  • Long count (Long) list.get(0)
  • return count

12
Element 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

13
Funkcje 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

14
Funkcje agregujace (II)
  • select new list(u.imie, u.nazwisko)
  • from Uzytkownik u
  • select new Podpis(u.imie, u.nazwisko)
  • from Uzytkownik u

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 lt 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 gt
  • (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 )
  • from Uzytkownik as uzytkownik
  • where uzytkownik.placa gt
  • all (select u.placa from Uzytkownik u
  • where u.wiek gt 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(Uzytkow
    nik.class)
  • criteria.setMaxResults(50)
  • List uzytkownik criteria.list()
  • List uzytkownicy session.createCriteria(Uzytkown
    ik.class)
  • .add(Restrictions.like(imie", Ma") )
  • .list()

28
Restrictions
  • 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()

29
Wyszukiwanie 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)
  • ......

30
Wyszukiwanie wedlug kryteriów (II)
  • addLikeRestrictionTextLike(uzytkownikCriteria,
    "imie", uzytkownikPreselection.getImie())
  • addLikeRestrictionTextLike(uzytkownikCriteria,
    "nazwisko", uzytkownikPreselection.getNazwisko())
  • uzytkownikCriteria.setResultTransformer(
  • Criteria.DISTINCT_ROOT_ENTITY)
  • return (ArrayListltUzytkownikgt) uzytkownikCriteria.
    list()

31
Wyszukiwanie wedlug kryteriów (III)
  • Criteria pokojCriteria uzytkownikCriteria.create
    Criteria(pokoj",Criteria.LEFT_JOIN)
  • addLikeRestrictionText(pokojCriteria, nazwa",
    uzytkownikPreselection.getPokojNazwa())

32
Wyszukiwanie 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)

33
Wyszukiwanie 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)

34
Wyszukiwanie 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()))

35
Wyszukiwanie 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))

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

37
Wyszukiwanie po zajetosci pola
  • private void addLikeRestrictionisNotNull(Criteria
    criteria, String propertyName)
  • Junction junc Restrictions.disjunction()
  • junc.add(Restrictions.isNotNull(propertyName))
  • criteria.add(junc)

38
Wyszukiwanie po zajetosci 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(Uzytkown
    ik.class)
  • .add( Restrictions.like(imie", M")
  • .addOrder( Order.asc(imie") )
  • .addOrder( Order.desc(wiek") )
  • .setMaxResults(30)
  • .list()

40
Projection
  • 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()

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.forCl
    ass(Uzytkownik.class)
  • .setProjection( Property.forName(placa").avg()
    )
  • session.createCriteria(Uzytkownik.class)
  • .add( Property.forName(placa").gt(avgPlaca) )
  • .list()

43
Wyszukiwanie przez przyklad
  • Uzytkownik uzytkownik new Uzytkownik()
  • uzytkownik.setImie(Marek')
  • uzytkownik.setWiek(30)
  • List results session.createCriteria(Uzytkownik.c
    lass)
  • .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 wartosc 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 likeimie")
  • .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
_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)

49
Filtr (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 ....

50
Filtr (II)
  • session.enableFilter(aktywny")
  • .setParameter(active", true)
  • session.createQuery ....
  • session.getEnableFilter(aktywny")
  • session.disableFilter(aktywny")
Write a Comment
User Comments (0)
About PowerShow.com