Zakładam, że klasa HibernateUtil, klasy odwzorowywujące tabele, pliki hbm.xml, są już utworzone w Twoim projekcie.
Dla naszego przykładu zdefiniujmy klasy java np.: Osoba
public class Osoba implements Serializable { private int ID_Osoby; private String imie; private String nazwisko; public Osoba(){}//Domyślny konstruktor JavaBeans. // settery i gettery dla każdego pola.:getImie,setImie,getID_Osoba,set_ID_Osoba,setNazwisko,getNazwisko; }
Zatem po pierwsze tworzymy obiekt sesji i tranzakcji Hibernate:
Session session = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx = session.beginTransaction(); tx.begin();Czas teraz przygotować odpowiednie zapytanie hsql, które pobierze całą tabelę: from Osoba.
Query Q = session.createQuery("from Osoba"); ArrayList<Osoba> list= new ArrayList<Osoba>(); list = (ArrayList<Osoba>) Q.list(); tx.commit();Widać, że utworzyłem zmienną list, która jest typu ArrayList z parametrem Osoba. Parametrem jest typ Osoba , ponieważ pobrałem wszystkie kolumny tabeli. Możemy teraz pobrać list.get(int i) poszczególną Osobę i wyświetlić jej informacje na konsoli:
for (int i=0;i<list.size();i++) { Osoba tempOsoba = list.get(i); System.out.println(tempOsoba.getID() + " " + tempOsoba.getImie() + " " + tempOsoba.getNazwisko()); }To był tylko wstęp. Teraz przejdziemy do prawdziwego zadania czyli wyświetlenie 2 kolumn imie oraz nazwisko z tabeli Osoba.
Session session = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx = session.beginTransaction(); tx.begin(); Query Q = session.createQuery("select imie,nazwisko from Osoba"); //Można zapisać "select osoba.imie,osoba.nazwisko from Osoba as osoba" - bardziej obiektowo :-) ArrayList<Object[]>list = new ArrayList<Object[]>; for (int i=0;i<list.size();i++) { Object temp[] = list.get(i); System.out.println(temp[0] + " " + temp[1]); }
Przydało by się wyjaśnić powyższy fragment kodu. Chodzi o to, że jeśli wybieramy kilka kolumn to implementacja Hibernate najprościej ujmując każdą kolumnę(każdy rekord kolumny jest typu Object) pakuje w obiekt Object. Jeżeli po klauzuli select wystąpią dwie[lub więcej] kolumny np : imie, nazwisko to automatycznie te dwie wartości są udostępniane jako tablica Object[] a dostęp do pól mamy za pomocą indeksów. Dlatego musimy utworzyć odpowiednią listę ArrayList<Object[]> do odebrania danych z rekordów z tabeli.
Można też użyć iteratora dla listy:
for (Iterator i = list.iterator();i.hasNext();){ Object[] result = (Object[]) i.next(); System.out.println(result[0] + " " + result[1] ); }
Dziękuję za uwagę - Robert.
0 comments:
Post a Comment