Przede wszystkim nale偶y zrozumie膰, 偶e Hibernate "tylko" 馃榿 opakowuje interfejs takie jak JDBC czy JTA daj膮c tym samym mo偶liwo艣膰 pracy u偶ytkownikowi na relacyjnej bazie danych w taki spos贸b jakby baza by艂a obiektowa. Takie podej艣cie z jednej strony daje szybk膮 i elastyczn膮 mo偶liwo艣膰 wykonywania operacji na bazie danych z drugiej strony wprowadza pewne minimalne op贸藕nienia w tych operacjach. Do podstawowych interfejs贸w w Hibernejcie nale偶膮:
✅ Configuration
Obiekt "Configuration" s艂u偶y do konfiguracji i uruchomienia Hibernejta.
Cechy obiektu "Configuration":
- wczytywanie danych z pliku konfiguracyjnego
- dodawanie adnotacji encji
- tworzenie obiekt贸w "SessionFactory"
- stworzenie obiektu Configuration
- wczytanie konfiguracji z pliku "hibernate.cfg.xml"
- dodanie klasy encji czyli mapy tabeli "owner"
- dodanie klasy encji czyli mapy tabeli "car"
- stworzenie SessionFactory
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import myhibernate.onedirection.entity.Car;
import myhibernate.onedirection.entity.Owner;
public class AddOneToManyApp {
public static void main(String[] args) {
1. Configuration conf = new Configuration();
2. conf.configure("hibernate.cfg.xml");
3. conf.addAnnotatedClass(Owner.class);
4. conf.addAnnotatedClass(Car.class);
5. SessionFactory factory = conf.buildSessionFactory();
Session session = factory.getCurrentSession();
Owner owner = new Owner();
owner.setFullName("Micha艂 Kowal");
Car car1 = new Car("BMW");
Car car2 = new Car("MERCEDES");
owner.AddCar(car1);
owner.AddCar(car2);
factory.close();
}
}
✅ SessionFactory
Obiekt "SessionFactory" tworzony jest tylko raz dla jednej bazy danych, jego zadaniem jest tworzenia obiekt贸w "Session". "SessionFactory" jest bezpieczny w膮tkowo.
Cechy obiektu "SessionFactory":
- ci臋偶ki obiekt, stworzenie go zabiera sporo czasu
- jedna instancja w aplikacji
- tworzenie obiekt贸w "Session"
- bezpieczny w膮tkowo
- stworzenie obiektu SessionFactory
- stworzenie obiektu Session
- zamkni臋cie obiektu SessionFactory
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import myhibernate.onedirection.entity.Car;
import myhibernate.onedirection.entity.Owner;
public class AddOneToManyApp {
public static void main(String[] args) {
Configuration conf = new Configuration();
conf.configure("hibernate.cfg.xml");
conf.addAnnotatedClass(Owner.class);
conf.addAnnotatedClass(Car.class);
1. SessionFactory factory = conf.buildSessionFactory();
2. Session session = factory.getCurrentSession();
Owner owner = new Owner();
owner.setFullName("Micha艂 Kowal");
Car car1 = new Car("BMW");
Car car2 = new Car("MERCEDES");
owner.AddCar(car1);
owner.AddCar(car2);
3. factory.close();
}
}
✅ Session
"Session" to obiekt reprezentuj膮cy jednostk臋 pracy z baz膮 danych ("unity of work"). "Session" jako zarz膮dca trwa艂o艣ci daje nam dost臋p do podstawowych operacji zapisu i odczytu obiekt贸w. Generalnie jeden obiekt "Session" odpowiada jednemu po艂膮czeniu Connection z interfejsu JDBC. Mo偶na przyj膮膰 偶e stworzony egzemplarz "Session" jest czym艣 pomi臋dzy po艂膮czeniem a transakcj膮 w bazie danych.
Cechy obiektu "Session":
- lekki do stworzenia i zniszczenia
- ma kr贸tki czas 偶ycia
- s艂u偶y do opakowywania po艂膮czenia z baz膮 danych
- nie jest bezpieczny w膮tkowo
Sesje mo偶na traktowa膰 jak buffor za艂adowanych obiekt贸w zwi膮zanych z baz膮 danych. Wszystkie zmiany na sesji mog膮 by膰 odwzorowane (czyli zapisane) w bazie danych. Logicznie rzecz bior膮c "sesja" mo偶e wykona膰 kilka transakcji w swoim obr臋bie.
- stworzenie obiektu session
- otwarcie po艂膮czenia
- wykonanie operacji w pami臋ci hibernate
- zapisanie w bazie danych
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import myhibernate.onedirection.entity.Car;
import myhibernate.onedirection.entity.Owner;
public class AddOneToManyApp {
public static void main(String[] args) {
Configuration conf = new Configuration();
conf.configure("hibernate.cfg.xml");
conf.addAnnotatedClass(Owner.class);
conf.addAnnotatedClass(Car.class);
SessionFactory factory = conf.buildSessionFactory();
1. Session session = factory.getCurrentSession();
Owner owner = new Owner();
owner.setFullName("Micha艂 Kowal");
Car car1 = new Car("BMW");
Car car2 = new Car("MERCEDES");
owner.AddCar(car1);
owner.AddCar(car2);
factory.close();
}
}
✅ Transaction
Obiekt "Transaction" odpowiada jednej transakcji bazodanowej i jest zwi膮zany z konkretn膮 sesj膮. Generalnie obiekt "Transaction" ma za zadanie ukry膰 szczeg贸艂y implementacyjne r贸偶nych mechanizm贸w transakcyjnych tj. JDBC czy JTA. Tworzymy go w nast臋puj膮cy spos贸b:
Transaction transaction = session.beginTransaction();
nast臋pnie mo偶emy j膮 zatwierdzi膰 albo wycofa膰:
transaction.rollback();
transaction.commit();
Transakcja bazodanowa to jednostka zadaniowa, kt贸ra zawsze ko艅czy si臋 zatwierdzeniem albo wycofaniem zmian, dzi臋ki temu pozostaje operacj膮 atomow膮. Oczywi艣cie nale偶y mie膰 na uwadze, 偶e sama transakcja bazodanowa to zbi贸r operacji CRUD, kt贸re stanowi膮 jedna ca艂o艣膰 i musz膮 spe艂nia膰 zasad臋 ACID .
Brak komentarzy:
Prze艣lij komentarz