Hibernate zapytania.

Slides:



Advertisements
Podobne prezentacje
Znaki informacyjne.
Advertisements

Podział i zastosowanie
Projektowanie bazy danych
Ludwik Antal - Numeryczna analiza pól elektromagnetycznych –W10
Bazy danych i inżynieria oprogramowania
Odwzorowanie obiektowo-relacyjne
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
Bazy danych 8. SQL podstawy P. F. Góra semestr letni 2004/05.
PHP + MySQL część II.
Marcin Pamuła Mateusz Stefek
Data powstania: 2001 rok Autor i lider: Gavin King Najnowsza wersja: Licencja: Open Source.
Ksantypa2: Architektura
Systemy operacyjne Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL Proste zapytania.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 3: Język bazy danych - SQL Funkcje grupowe.
Hibernate Klasy trwałe
Odwzorowania relacyjno-obiektowe Hibernate Tranzakcyjność i bezpieczeństwo danych.
Ministerstwo Gospodarki Poland'sexperience Waldemar Pawlak Deputy Prime Minister, Minister of Economy March 2010.
SQL – Structured Query Language (2)
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
SQL-owskie szlaki górskie
SQL select kredytobiorca,bank, rodzaj, data_zawarcia, klasyfikacja,kwota, terminzapadalnosci-data_zawarcia iledni from tab_kredyt where (terminzapadalnosci-data_zawarcia)>1095.
BD-LAB6 Wojciech Pieprzyca
WYKONYWANIE ZAPYTAŃ Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill, 2000 (książka.
Odwzorowania relacyjno-obiektowe Hibernate Klasy trwałe.
Odwzorowania relacyjno-obiektowe Hibernate zapytania.
Projektowanie warstwy serwera DisplayTag. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu.
Hibernate relacje.
Hibernate uzupełnienie
Odwzorowania relacyjno-obiektowe Hibernate Tranzakcyjność i bezpieczeństwo danych.
Projektowanie warstwy serwera Wprowadzenie. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu.
Klasyfikacja systemów
Transformacja Z (13.6).
Język SQL – ciąg dalszy DML (Data Manipulation Language)
Język SQL (Structured Query Language) DDL (Data Definition Language)
Przykład włamania do aplikacji internetowej poprzez modyfikację zapytań SQL Skrypty ASP Serwer bazy danych MS SQL Server Piotr Kuźniacki BDi.
Pytania konkursowe.
Wprowadzenie do JSP Copyright © Politecnico di Milano September 2003 Translation: Kamil Żyła, Politechnika Lubelska.
SQL – zapytania posumowanie
SQL – Structured Query Language (3)
Przetwarzanie w oknie - nowa siła zapytań
Wykład 4 Prowadzący: dr Paweł Drozda. Trzy typy instrukcji Wstawianie – INSERT INTO Usuwanie – DELETE FROM Aktualizacje - UPDATE dr Paweł Drozda.
Raport z badań termowizyjnych – RECTICEL Rys. 1a. Rozdzielnia RS14 Temperatura maksymalna 35,27 o C Rys. 1b. Rozdzielnia RS14 (wizyjny) 3.
Delphi i Acad cd.. l_poz := MSpace.Count; Label3.Caption:=IntToStr(l_poz); ent:=Mspace.Item(0); for l_poz := 0 to MSpace.Count-1 do begin; ent:=Mspace.Item(l_poz);
Podstawy inżynierii oprogramowania Zofia Kruczkiewicz
PIO 3_2, Zofia Kruczkiewicz1 Wykład 3 – część druga Iteracyjno-rozwojowy cykl oprogramowania 3.
KOLEKTOR ZASOBNIK 2 ZASOBNIK 1 POMPA P2 POMPA P1 30°C Zasada działanie instalacji solarnej.
SQL - Structured Query Language
Seminarium problemowe
PIO 2_2, Zofia Kruczkiewicz1 Wykład 2 – część druga Iteracyjno-rozwojowy cykl oprogramowania 2.
-17 Oczekiwania gospodarcze – Europa Wrzesień 2013 Wskaźnik > +20 Wskaźnik 0 a +20 Wskaźnik 0 a -20 Wskaźnik < -20 Unia Europejska ogółem: +6 Wskaźnik.
EcoCondens Kompakt BBK 7-22 E.
PL/SQL – dalsza wędrówka
Programowanie w języku C++
User experience studio Użyteczna biblioteka Teraźniejszość i przyszłość informacji naukowej.
1 SBD, L.Banachowski Podstawy SQL - języka relacyjnych i obiektowo-relacyjnych baz danych (SQL2, SQL'1999, Oracle) Powtórzenie wyk ł adu 3.
Testogranie TESTOGRANIE Bogdana Berezy.
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 5.
1 SBD, L.Banachowski Zaawansowane cechy SQL Powtórzenie wyk ł adu 5.
Kalendarz 2020.
Elementy geometryczne i relacje
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Strategia pomiaru.
Odwzorowania relacyjno-obiektowe Hibernate preselekcja.
Object-relational mapping (aka O/RM, ORM, and O/R mapping)
1 Instrukcja SELECT : SELECT[DISTINCT  ALL] {*  [wyrażenie_kolumnowe [AS nowa_nazwa]],[…]} FROMNazwaTabeli [alias],[...] [WHEREwarunek_selekcji_wierszy]
Wybieranie wierszy: 1 Warunek WHERE Rodzaje warunków: - liczbowe - liczbowe z zakresu - znakowe.
Sławomir Civic Białek HIBERNATE.
(według:
J2EE: Bazy danych c.d. Język zapytań EJB QL.
Zapis prezentacji:

Hibernate zapytania

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)

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

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

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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

DetachedCriteria (II) DetachedCriteria avgPlaca = DetachedCriteria.forClass(Uzytkownik.class) .setProjection( Property.forName(”placa").avg() ); session.createCriteria(Uzytkownik.class) .add( Property.forName(”placa").gt(avgPlaca) ) .list();

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

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

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

Zapytania w SQL (III) query = session.createSQLQuery("SELECT * FROM UZYTKOWNIK WHERE IMIE like:imie") .addEntity(Uzytkownik.class); List uzytkownicy = query.setString(”imie", ”Ma%").list();

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

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

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

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