Podstawowe interfejsy

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":

  1. wczytywanie danych z pliku konfiguracyjnego
  2. dodawanie adnotacji encji
  3. tworzenie obiekt贸w "SessionFactory"


馃憠 Poni偶ej przedstawiony zosta艂 spos贸b u偶ycia obiektu Configuration:
  1. stworzenie obiektu Configuration
  2. wczytanie konfiguracji z pliku "hibernate.cfg.xml"
  3. dodanie klasy encji czyli mapy tabeli "owner"
  4. dodanie klasy encji czyli mapy tabeli "car"
  5. stworzenie SessionFactory 

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) {

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();

session.beginTransaction();

Owner owner = new Owner();
owner.setFullName("Micha艂 Kowal");

Car car1 = new Car("BMW");
Car car2 = new Car("MERCEDES");

owner.AddCar(car1);
owner.AddCar(car2);

session.save(owner);

session.getTransaction().commit();
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":

  1. ci臋偶ki obiekt, stworzenie go zabiera sporo czasu
  2. jedna instancja w aplikacji
  3. tworzenie obiekt贸w "Session"
  4. bezpieczny w膮tkowo


馃憠 Poni偶ej przedstawiony zosta艂 spos贸b u偶ycia obiektu SessionFactory:
  1. stworzenie obiektu SessionFactory 
  2. stworzenie obiektu Session
  3. zamkni臋cie  obiektu SessionFactory 

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);
1. SessionFactory factory = conf.buildSessionFactory();

2. Session session = factory.getCurrentSession();

session.beginTransaction();

Owner owner = new Owner();
owner.setFullName("Micha艂 Kowal");

Car car1 = new Car("BMW");
Car car2 = new Car("MERCEDES");

owner.AddCar(car1);
owner.AddCar(car2);

session.save(owner);

session.getTransaction().commit();
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.


馃憠 Poni偶ej przedstawiony zosta艂 spos贸b u偶ycia obiektu Session:
  1. stworzenie obiektu session
  2. otwarcie po艂膮czenia
  3. wykonanie operacji w pami臋ci hibernate
  4. 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();

2. session.beginTransaction();

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. session.save(owner);

4. session.getTransaction().commit();
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