Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych http://www.mini.pw.edu.pl/~lucknerm
Tworzenie zapytań Prostych Z parametrami Stronicowanych Posortowanych Międzyencyjnych Natywnych Nazwanych 2014-04-08 2
Tworzone przy pomocy menadżera encji Nazwy tabeli i kolumn zastępowane są nazwami encji i ich pól Query query = em.createquery("select OBJECT(s) FROM Students s WHERE s.fname='john'"); Wynik zwracany w postaci listy List <Students> list = query.getresultlist(); Lub pojedynczego rekordu Students students = query. getsingleresult(); 2014-04-08 3
Parametry definiujemy po dwukropku Query query = em.createquery("select OBJECT(s) FROM Students s WHERE s.fname=:firstname"); Przypisujemy im wartości query.setparameter("firstname", John") 2014-04-08 4
Można ustalić maksymalną liczbę zwracanych rekordów query.setmaxresults(10) Jak i indeks rekordu początkowego query. setfirstresult(5) Lub połączyć oba ograniczenia query.setmaxresults(10).setfirstresult(5).getresultlist(); 2014-04-08 5
Niestety sortowanie odbywa się tradycyjnie Query query = em.createquery("select OBJECT(s) FROM Students s WHERE s.fname=:firstname ORDER BY s.lastname"); Aby otrzymać stabilne wyniki należy dodać sortowanie po kluczu głównym Query query = em.createquery("select OBJECT(s) FROM Students s WHERE s.fname=:firstname ORDER BY s.lastname, s.indexno"); 2014-04-08 6
Przy definiowaniu warunków zapytania można wykorzystywać przyłączone encje Query query = em.createquery("select OBJECT(s) FROM Students s WHERE s.faculty.name = Computer Science "); 2014-04-08 7
W wypadku zapytania zwracającego wiele typów encji Query query = em.createquery("select s.lastname, s.faculty.name FROM Students s WHERE s.faculty.name = Computer Science "); Można wykorzystać klasę mapującą Query query = em.createquery("select new StudentFaculty(s.lastname, s.faculty.name) FROM Students s WHERE s.faculty.name = Computer Science "); Klasa StudentFaculty musi zostać zdefiniowana wraz z odpowiednim konstruktorem 2014-04-08 8
Tworzone przy pomocy menadżera encji Używają nazw tabeli i kolumn Query query = em.createnativequery("select * FROM Students WHERE fname='john'); Wynik zostanie przypisany do encji, jeżeli jej klasa zostanie przedstawiona jako drugi argument Query query = em.createnativequery("select * FROM Students WHERE fname='john', Students.class); 2014-04-08 9
Są definiowane w komponentach encyjnych @NamedQuery(name = " Students.findAll", ", query= "select o from Students o ) Wywołanie następuje poprzez menadżera encji em.createnamedquery("persons.findall").getresultlist(); Można zdefiniować zbiór zapytań @NamedQueries({ @NamedQuery(name = "Students.findAll", query = "select o from Students o"), @NamedQuery(name = "Students.findByName", query = "select o from Students o where o.fname like :Name"),}) Metody fasady do obsługi zapytań nazwanych mogą być generowane automatycznie 2014-04-08 10
Wystartuj usługi ORACLE Pobierz skrypty tworzące bazę danych LAB07.zip Rozpakuj je do katalogu tymczasowego Z poziomu tego katalogu uruchom sqlplus Połącz się do bazy ORACLE jako DBA Ewentualnie: sqlplus user/pass@//host:port/sid Uruchom skrypt start build.sql Utwórz połączenie w NetBeans Login: LAB07 Pasword: STUDENT 2014-04-08 11
Utwórz Entity Bean 3.0 na podstawie tabel Utwórz komponent sesyjny Utwórz klienta dla fasady 2014-04-08 12
Znajdź studenta O imieniu Jon O imieniu Bill 2014-04-08 13
Znajdź studentów O końcówce nazwiska sky 2014-04-08 14
Wyświetl studentów, porządku alfabetycznym, według nazwiska Pięciu, poczynając od pierwszego Dziesięciu, poczynając od szóstego Pięciu, poczynając od jedenastego 2014-04-08 15
Znajdź wydziały studentów z nazwiskami na literę H Wyświetl imię, nazwisko i wydział studentów z nazwiskami na literę L 2014-04-08 16
Zdefiniuj zapytanie znajdujące studentów Według wzorca nazwiska Według wydziału 2014-04-08 17
Korzystając z NativeQuery Wyświetl imię, nazwisko i wydział studentów z nazwiskami na literę L Zdefiniuj zapytanie znajdujące studentów Według wzorca nazwiska Według wydziału 2014-04-08 18