LOB adatok feltérképezése hibernált állapotban

1. Áttekintés

A LOB vagy a Large OBject változó hosszúságú adattípusra utal nagy objektumok tárolására.

Az adattípusnak két változata van:

  • CLOB - Karakter nagy objektum nagy szöveges adatokat tárol
  • BLOB - Bináris nagy objektum bináris adatok tárolására szolgál, például kép, hang vagy videó

Ebben az oktatóanyagban megmutatjuk, hogyan használhatjuk a hibernált ORM-et nagy objektumok megtartásához.

2. Beállítás

Például a Hibernate 5 és a H2 adatbázist fogjuk használni. Ezért deklarálnunk kell őket függőségként pom.xml:

 org.hibernate hibernate-core 5.4.12. Végső com.h2database h2 1.4.196 

A függőségek legújabb verziója a Maven Central Repositories-ban található.

A Hibernate beállításának részletesebb áttekintéséhez olvassa el az egyik bevezető cikkünket.

3. LOB adatmodell

A mi modellünk „Felhasználó” tulajdonságai az azonosító, a név és a fénykép. Képet tárolunk a FelhasználóFotótulajdonságát, és feltérképezzük egy BLOB-ra:

@Entity @Table (name = "user") public class User {@Id private String id; @Column (név = "név", columnDefinition = "VARCHAR (128)") privát karakterlánc neve; @Lob @Column (név = "fotó", columnDefinition = "BLOB") privát byte [] fotó; // ...}

A @Fajankó az annotation megadja, hogy az adatbázisnak a tulajdonságot mint Nagy objektum. A oszlopDefiníció ban,-ben @Oszlop az annotáció határozza meg az oszlop típusát.

Mivel spórolni fogunk bájt tömb, használjuk FOLT.

4. Használat

4.1. Hibernált munkamenet kezdeményezése

session = HibernateSessionUtil .getSessionFactory ("hibernate.properties") .openSession ();

A segítő osztály felhasználásával felépítjük a Hibernált munkamenet ban megadott adatbázis-információk felhasználásával hibernálni.tulajdonságok fájl.

4.2. Felhasználói példány létrehozása

Tegyük fel, hogy a felhasználó képfájlként tölti fel a fényképet:

Felhasználó felhasználó = új Felhasználó (); InputStream inputStream = this.getClass () .getClassLoader () .getResourceAsStream ("profile.png"); if (inputStream == null) {fail ("Nem sikerült beszerezni az erőforrásokat"); } user.setId ("1"); user.setName ("Felhasználó"); user.setPhoto (IOUtils.toByteArray (inputStream)); 

A képfájlt a. Segítségével átalakíthatjuk bájt tömbgé Apache Commons IO könyvtár, végül hozzárendeljük a bájt tömböt az újonnan létrehozott részeként Felhasználó tárgy.

4.3. Tartós nagy tárgy

A Felhasználó használni a Ülés, a Hibernálás átalakítja az objektumot az adatbázis rekordjává:

session.persist (felhasználó); 

A @Fajankó osztályon deklarált kommentár Felhasználó, Hibernálás megérti, hogy tárolnia kell a "fénykép" ingatlan mint FOLT adattípus.

4.4. Adatok ellenőrzése

Visszaadjuk az adatokat az adatbázisból és a Hibernálás hogy visszaképezzem Jáva objektum, hogy összehasonlítsa a beillesztett adatokkal.

Mivel ismerjük a beillesztettet Felhasználós id, felhasználjuk az adatok lekérésére az adatbázisból:

Felhasználói eredmény = session.find (Felhasználó.osztály, "1"); 

Hasonlítsuk össze a lekérdezés eredményét a bemenettel FelhasználóAdatai:

assertNotNull ("A lekérdezés eredménye null", eredmény); assertEquals ("A felhasználó neve érvénytelen", user.getName (), result.getName ()); assertTrue ("A felhasználó fényképe sérült", Arrays.equals (user.getPhoto (), result.getPhoto ())); 

Hibernálás leképezi az adatbázisban lévő adatokat a Jáva objektum ugyanazokat a leképezési információkat használja a feljegyzéseken.

Ezért a visszakeresett Felhasználó objektumnak ugyanazok az információi lesznek, mint a beillesztett adatoknak.

5. Következtetés

FAJANKÓ a nagy objektum adatok tárolására szolgáló adattípus. Kétféle változata van FAJANKÓ amelyet úgy hívnak FOLT és CLOB. FOLT bináris adatok tárolására szolgál, míg CLOB a szöveges adatok tárolására szolgál.

Használata Hibernálás, bebizonyítottuk, hogy nagyon egyszerű az adatokat leképezni ide és onnan Jáva objektumokat, mindaddig, amíg az adatbázisban meghatározzuk a helyes adatmodellt és a megfelelő táblaszerkezetet.

Mint mindig, a cikk kódja elérhető a GitHubon.


$config[zx-auto] not found$config[zx-overlay] not found