3.1 Hibernált állapot és adatbázisok összekapcsolása

Megtanultuk, hogyan kapcsolhatjuk össze a Hibernate-ot az alkalmazásunkkal a Maven segítségével, és hogyan lehet táblázatokat osztályokhoz rendelni annotációk segítségével. És most felmerül a következő kérdés: hogyan olvassunk ki objektumokat az adatbázisból vagy mentsük el őket?

Nem olyan gyorsan. Először is három dologgal kell foglalkoznod:

  • Adatbázis-kapcsolat konfigurálása
  • A hibernált állapot beállítása
  • Munka az EntityManagerrel

A hibernálás teljesen elrejti az adatbázissal végzett munkát az alkalmazás elől, de a túlzások elkerülése érdekében azt helyesen kell konfigurálni. Ezt a szakaszt nem hagyhatja ki – különben honnan tudja a Hibernate, hogy melyik adatbázisba kell menteni az objektumokat?

A hibernálás háromféleképpen konfigurálható, és adatbázis-információkat adhat meg

  • Használja a Properties fájlt
  • Használja a hibernate.cfg.xml fájlt
  • Konfigurációs komponens módszerek használata

És bár én az utolsót szeretem a legjobban, mindhárommal biztosan találkozni fogsz, ezért itt mindhármat elemezzük.

3.2 Jogosultság az adatbázisban

Kezdjük a legfontosabbal – az adatbázis-kapcsolatokkal. Ehhez meg kell adnia az adatokat, hogy a Hibernate bejelentkezhessen a kívánt adatbázisba.

Tulajdonságok Fájl Konfiguráció
hibernált.tulajdonságok
hibernate.dialect= org.hibernate.dialect.Oracle9Dialect
hibernate.connection.driver_class= oracle.jdbc.driver.OracleDriver 
hibernate.connection.url= jdbc:oracle:thin:@localhost:1521:supershop
hibernate.connection.username=root
hibernate.connection.password=secret
hibernate.show_sql=true
hibernate.hbm2ddl=update

Ugyanezek a beállítások megadhatók xml fájl formájában is:

XML alapú konfiguráció
hibernate.cfg.xml

<hibernate-configuration>	
	<session-factory>	
        	
    	<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>  	
    	<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 	
    	<property name="connection.url">jdbc:oracle:thin:@localhost:1521:supershop</property>  	
    	<property name="connection.username">root</property>  	
    	<property name="connection.password">secret</property>
    	<property name="hibernate.show_sql ">true</property>        
    	<property name="hbm2ddl.auto">update</property> 	
     	
	</session-factory>	
</hibernate-configuration> 

Mindkét példában ugyanazokat a beállításokat látjuk azonos értékekkel. Csak arról van szó, hogy az első példa tulajdonságfájlként , a második pedig xml-fájlként ábrázolja őket .

Ezek a beállítások három csoportra oszthatók:

  1. Adja meg a DBMS típusát
    • Adja meg a nyelvjárást (DBMS típus), például Oracle 9.0
    • Adja meg a JDBC illesztőprogram nevét a DBMS-sel való munkához
  2. Adja meg az adatbázisban az engedélyezéshez szükséges adatokat
    • adatbázis url
    • felhasználónév
    • Jelszó
  3. A hibernált motor konfigurálása
    • hibernate.show_sql- A Hibernate minden végrehajtott kérést megkettőz a konzolon
    • hbm2ddl.auto- A Hibernate szükség esetén módosítja az adatbázis szerkezetét

Van egy harmadik módja a konfiguráció beállításának – a tárolókon keresztül. Általában a Spring-szel együtt használják, ezért a SpringFramework megtanulásakor nézzük meg.

3.3 A SessionFactory letöltése

A következő lépés a SessionFactory objektum beszerzése. Ennek többféle módja van:

Az első módszer a hibernate.properties fájl használata .

Ehhez csak a következő kódot kell beírnia:

SessionFactory sessionFactory = new Configuration().buildSessionFactory();

Ha a hibernate.properties fájl nem található az aktuális projektkönyvtárban, a rendszer kivételt dob.

A második módszer a hibernate.cfg.xml használatával történő konfiguráció .

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

Ha ilyen kódot ír, akkor a hibernate.cfg.xml. Ha nem található ilyen fájl, a metódus buildSessionFactory()kivételt dob.

A harmadik módszer a konfigurációs fájl manuális beállítása .

Néha a fejlesztési folyamat során szükségessé válik egy tesztbázisra váltás vagy más beállítások módosítása az alappal való munkavégzéshez, ehhez manuálisan beállíthatja a konfigurációs fájlt:

SessionFactory sessionFactory = new Configuration().configure("hibernate-dev.cfg.xml").buildSessionFactory();

Negyedik módszer – egyéni hibernate.properties fájlt használunk:

ClassLoader classLoader = Thread.currentThread().getClassLoader();

Properties properties = new Properties();
properties.load(classLoader.getResourceAsStream("hibernate-dev.properties"));

SessionFactory sessionFactory = new Configuration()
            .addProperties(properties)
            .buildSessionFactory();

És végül egyszerűen bevarrhatja az összes szükséges paramétert közvetlenül a kódba:

Properties properties = new Properties();
properties.put(Environment.DRIVER, "com.mysql.jdbc.Driver");
properties.put(Environment.URL, "jdbc:mysql://localhost:3306/supershop");
properties.put(Environment.USER, "root");
properties.put(Environment.PASS, "password");

SessionFactory sessionFactory = new Configuration()
            .setProperties(properties)
            .buildSessionFactory();

3.4 Adja meg, hol keresse az entitásosztályokat

De ez még nem minden. Amikor konfigurálunk egy SessionFactory objektumot hibernált állapotban, ez a SessionFactory ellenőrzi, hogy az összes szükséges tábla a szükséges oszloptípusokkal létezik-e az adatbázisban.

És ahhoz, hogy a SessionFactory ezt meg tudja tenni, át kell adnia azon entitásosztályok listáját, amelyeket le kell képeznie az adatbázishoz.

Háromféleképpen lehet átadni az entitásosztályok listáját:

1. módszer. Adjon hozzá hibernate.cfg.xmlegy sort, például:

<mapping class="class-qualified-name" />

Példa:

<mapping class="com.codegym.data.User" />
<mapping class="com.codegym.data.Employee" />
<mapping class="com.codegym.data.Task" />

Második módszer. Hívja meg a metódust a ConfigurationaddAnnotatedClass() objektumon . Példa:

SessionFactory sessionFactory = new Configuration()
   	.configure()
   	.addAnnotatedClass(com.codegym.data.User.class)
   	.buildSessionFactory();

Ha sok osztály van, akkor egész csomagokban is hozzáadhatja őket:

SessionFactory sessionFactory = new Configuration()
   	.configure()
   	.addPackage("com.codegym.data")
   	.buildSessionFactory();

3.5 Utolsó példa

Most, hogy megtanultuk, hogyan kell konfigurálni a SessionFactory objektumot, írjuk meg az azt használó kódot.

Három módszerből fog állni:

  1. A hibernált állapot beállítása
  2. Módszer, amely az összes alkalmazottat lekéri az adatbázisból
  3. Módszer, amely új alkalmazottat ment az adatbázisba

Ez a kódsablon valahogy így nézne ki:

class EmployeeManager {
    private SessionFactory sessionFactory;

    public void class init() {
    	this.sessionFactory = new Configuration()
        	.configure()
        	.buildSessionFactory();
   }

   public List<Employee> getAllEmployes() {
         try (Session session = sessionFactory.openSession()) {
  	          Query<Employee> query = session.createQuery("from Employee", Employee.class);
    	        return query.list();
         }
   }

   public void addEmployee(Employee employee ) {
     	try (Session session = sessionFactory.openSession()) {
            Transaction transaction = session.beginTransaction();
       	    session.save(employee);
            transaction.commit();
     	}
   }
}

Mielőtt lekérdezést hajtana végre az adatbázisban, külön munkamenetet kell létrehoznia. Ha a kérések összefüggenek, akkor ugyanabban a munkamenetben végrehajthatók. Ha a kérések nem kapcsolódnak egymáshoz (és több perc is eltelhet közöttük), akkor saját munkamenetet kell létrehozniuk.

Ha adatokat szeretne olvasni az adatbázisból, vagy összetett lekérdezést szeretne végrehajtani, először létre kell hoznia egy Query objektumot, és azt kell használnia a lekérdezés végrehajtásához.

Ezenkívül az adatbázis minden lekérdezése a saját tranzakciójában hajtódik végre. Meg kell nyitnia, végre kell hajtania a szükséges műveleteket, majd be kell zárnia (commit).

A következő előadásokban részletesebben elemezzük, hogyan működik mindez.