Mapovanie údajov LOB v režime dlhodobého spánku

1. Prehľad

LOB alebo Large OBject označuje dátový typ s premennou dĺžkou na ukladanie veľkých objektov.

Dátový typ má dve varianty:

  • CLOB - Znak veľký objekt uloží veľké textové údaje
  • BLOB - Binárny veľký objekt slúži na ukladanie binárnych údajov, ako sú obrázky, zvuk alebo video

V tomto tutoriáli si ukážeme, ako môžeme využiť Hibernate ORM na pretrvávanie veľkých objektov.

2. Inštalácia

Napríklad použijeme Hibernate 5 a H2 Database. Preto ich musíme deklarovať ako závislosti v našom pom.xml:

 org.hibernate hibernate-core 5.4.12. Konečná kom.h2databáza h2 1.4.196 

Najnovšia verzia závislostí je v centrálnych úložiskách Maven.

Podrobnejší pohľad na konfiguráciu režimu dlhodobého spánku nájdete v jednom z našich úvodných článkov.

3. Údajový model LOB

Náš model „Používateľ“ má ako vlastnosti id, meno a fotografiu. Uložíme obrázok do PoužívateľVlastnosť fotografie a namapujeme ju na BLOB:

@Entity @Table (name = "user") verejná trieda User {@Id private String id; @Column (name = "name", columnDefinition = "VARCHAR (128)") private String name; @Lob @Column (name = "fotka", columnDefinition = "BLOB") súkromná bajtová [] fotografia; // ...}

The @Lob anotácia špecifikuje, že databáza by mala vlastnosť uložiť ako Veľký objekt. The stĺpecDefinícia v @ Stĺpec anotácia definuje typ stĺpca pre vlastnosť.

Keďže ideme šetriť bajtové pole, používame BLOB.

4. Použitie

4.1. Iniciujte reláciu dlhodobého spánku

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

Pomocou triedy pomocníkov zostavíme Relácia dlhodobého spánku pomocou databázových informácií uvedených v prezimovať.vlastnosti spis.

4.2. Vytváranie inštancie používateľa

Predpokladajme, že používateľ nahrá fotografiu ako súbor obrázka:

User user = new User (); InputStream inputStream = this.getClass () .getClassLoader () .getResourceAsStream ("profil.png"); if (inputStream == null) {fail ("Nemôžem získať zdroje"); } user.setId ("1"); user.setName ("Užívateľ"); user.setPhoto (IOUtils.toByteArray (inputStream)); 

S pomocou obrazca konvertujeme obrazový súbor na bajtové pole Apache Commons IO knižnicu a nakoniec priradíme bajtové pole ako súčasť novovytvoreného Používateľ objekt.

4.3. Pretrvávajúci veľký objekt

Uložením Používateľ pomocou Session, Hibernácia prevedie objekt na databázový záznam:

session.persist (užívateľ); 

Z dôvodu @Lob anotácia uvedená v triede Používateľ, Hibernácia chápe, že by malo ukladať „Fotka“ majetok ako BLOB Dátový typ.

4.4. Overovanie dát

Získame údaje späť z databázy a pomocou Hibernácia zmapovať to späť na Java objekt na porovnanie s vloženými údajmi.

Keďže poznáme vložené Používateľs id, použijeme ho na získanie údajov z databázy:

Výsledok používateľa = session.find (User.class, "1"); 

Porovnajme výsledok dotazu so vstupom PoužívateľÚdaje:

assertNotNull ("Výsledok dotazu je null", výsledok); assertEquals ("Meno používateľa je neplatné", user.getName (), result.getName ()); assertTrue ("Fotografia používateľa je poškodená", Arrays.equals (user.getPhoto (), result.getPhoto ())); 

Hibernácia namapuje údaje v databáze na server Java objekt s použitím rovnakých mapovacích informácií na anotáciách.

Preto načítané Používateľ objekt bude mať rovnaké informácie ako vložené údaje.

5. Záver

LOB je dátový typ na ukladanie údajov veľkých objektov. Existujú dve odrody LOB ktorá sa volá BLOB a CLOB. BLOB slúži na ukladanie binárnych údajov, zatiaľ čo CLOB slúži na ukladanie textových údajov.

Použitím Hibernácia, predviedli sme, ako je celkom ľahké mapovať údaje do a z Java objekty, pokiaľ definujeme správny dátový model a príslušnú štruktúru tabuľky v databáze.

Kód tohto článku je ako vždy k dispozícii na GitHub.


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