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