140 likes | 327 Views
Hibernate Podstawy. Plan wykładu. Modelowanie relacyjno-obiektowe Klasy trwałe i encje Definiowanie relacji pomiędzy klasami trwałymi Wyszukiwanie danych. Relacyjne bazy danych - zalety. Zarządzanie dużymi ilościami danych wyszukiwanie, sortowanie Zarządzanie grupami danych
E N D
Hibernate Podstawy
Plan wykładu • Modelowanie relacyjno-obiektowe • Klasy trwałe i encje • Definiowanie relacji pomiędzy klasami trwałymi • Wyszukiwanie danych
Relacyjne bazy danych - zalety • Zarządzanie dużymi ilościami danych • wyszukiwanie, sortowanie • Zarządzanie grupami danych • Łączenie, agregacja • Współużytkowanie • Współbieżność (transakcje) • Integralność • Więzy integralności • Izolacja transakcji
Relacyjne bazy danych - wady • Niezgodność modelu pojęciowego z modelem implementacyjnym • Brak środków hermetyzacji i modularyzacji (brak oddzielenia implementacji od specyfikacji)
Technologie dostępu do bazy danych (I) • JDBC • Podstawowy interfejs dostępu do baz danych • Ręczne kodowanie w JDBC uciążliwe i podatne na błędy • SQLJ • Naturalne zagnieżdżanie poleceń SQL w kodzie Java • Odporna na błędy alternatywa dla bezpośredniego korzystania z JDBC • Martwy standard
Technologie dostępu do bazy danych (II) • Encyjne EJB 2.x • Nienaturalne • Złożone • Biblioteka znaczników JSTL SQL • Wygodna w prostych aplikacjach opartych na JSP • Miesza logikę biznesową z logiką prezentacji, narusza model MVC • Technologie odwzorowania obiektowo-relacyjnego • Efektywnie mapują świat obiektów na świat relacyjnej bazy danych • Najczęściej działają w warstwie webowej aplikacji
Mapowanie obiektowo-relacyjne • Skorzystać z zalet relacyjnych baz danych • Jednocześnie nie rezygnując z obiektowości
Java Persistance API • Odejście od modelu relacyjnego na rzecz wygodnego i naturalnego obiektowego modelu danych • Obiektowy język zapytań EJB QL • Uniezależnienie się od bazy danych • Podejście obiektowe : dziedziczenie, kolekcje, zależności • Automatyczna obsługa transakcji wewnątrz kontenera EJB • Wbudowane wsparcie dla optimistic lock • Rezygnacja ze wzorca DTO • Wykorzystanie adnotacji
Konfiguracja <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN” "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="hibernate.connection.url">jdbc:oracle:thin:@desyesb.oracle.dmcs.pl</property> <property name="hibernate.connection.password">admin</property> <property name="hibernate.connection.username">admin</property> <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> <mapping class=”przyklad.Uzytkownik" /> </session-factory> </hibernate-configuration>
SessionFactory • Instancja org.hibernate.cfg.Configuration służy do zbudowania obiektu SessionFactory. • SessionFactory przechowuje skompilowane mapowania oraz konfiguracje środowiska Hibernate dla pojedynczej bazy. • SessionFactory jest dzielony pomiędzy wiele wątków. • SessionFactory jest podstawą do stworzenia obiektu Session.
Session • Session jest jednowątkowym obiektem reprezentującym dialog pomiędzy aplikacją, a bazą danych. Obiekt Session opakowuje połączenie JDBC. • Sesja stanowi podstawową jednostkę pracy z Hibernatem. • Session stanowi podstawę do stworzenia obiektu Transaction.
Synchronizacja bazą danych Session sessions = HibernateUtil.getSession(); sessions.getTransaction().begin(); List<Uzytkownik> list = sessions.createQuery("from Uzytkownik").list(); for (Uzytkownik u : list) System.out.println(u.getImie()); Uzytkownik u = new Uzytkownik(); u.setImie("jan"); sessions.persist(u); sessions.getTransaction().commit(); sessions.close();
Przykład – EJB3 public @Stateless class UzytkownikDAOBean implements UzytkownikDAO { @PersistenceContext(unitName = "PostgresU") private EntityManager entityManager; public Uzytkownik addNew() { Uzytkownik uzytkownik = new Uzytkownik(); uzytkownik.setImie(”Jan"); entityManager.persist(uzytkownik); return cust; } }