Kartlegging av LOB-data i dvalemodus

1. Oversikt

LOB eller Large OBject refererer til en datatype med variabel lengde for lagring av store objekter.

Datatypen har to varianter:

  • CLOB - Karakter stort objekt lagrer store tekstdata
  • BLOB - Binært stort objekt er for lagring av binære data som bilde, lyd eller video

I denne opplæringen viser vi hvordan vi kan bruke Hibernate ORM for å vedvare store objekter.

2. Oppsett

For eksempel bruker vi Hibernate 5 og H2 Database. Derfor må vi erklære dem som avhengigheter i vårt pom.xml:

 org.hibernate hibernate-core 5.4.12.Final com.h2database h2 1.4.196 

Den siste versjonen av avhengighetene er i Maven Central Repositories.

For en grundigere titt på konfigurering av dvalemodus, se en av våre innledende artikler.

3. LOB-datamodell

Vår modell "Bruker" har id, navn og bilde som egenskaper. Vi lagrer et bilde i Bruker'S fotoeiendom, og vi vil tilordne den til en BLOB:

@Entity @Table (name = "user") offentlig klasse bruker {@Id privat streng-id; @Column (name = "name", columnDefinition = "VARCHAR (128)") privat strengnavn; @Lob @Column (name = "photo", columnDefinition = "BLOB") privat byte [] foto; // ...}

De @Lob kommentar spesifiserer at databasen skal lagre eiendommen som Stor gjenstand. De columnDefinition i @Kolonne kommentar definerer kolonnetypen for egenskapen.

Siden vi skal spare byte-array, vi bruker BLOB.

4. Bruk

4.1. Start dvalemodus

økt = HibernateSessionUtil .getSessionFactory ("hibernate.properties") .openSession ();

Ved hjelp av hjelperklassen vil vi bygge Dvalemodus ved hjelp av databaseinformasjonen gitt i dvalemodus. eiendommer fil.

4.2. Opprette brukerinstans

La oss anta at brukeren laster opp bildet som en bildefil:

Brukerbruker = ny bruker (); InputStream inputStream = this.getClass () .getClassLoader () .getResourceAsStream ("profile.png"); if (inputStream == null) {fail ("Kan ikke skaffe ressurser"); } user.setId ("1"); user.setName ("bruker"); user.setPhoto (IOUtils.toByteArray (inputStream)); 

Vi konverterer bildefilen til byte-arrayet ved hjelp av Apache Commons IO bibliotek, og til slutt tilordner vi byte-arrayet som en del av det nyopprettede Bruker gjenstand.

4.3. Vedvarende stort objekt

Ved å lagre Bruker bruker Økt, den Dvalemodus vil konvertere objektet til databaseposten:

session.persist (bruker); 

På grunn av @Lob kommentar erklært på klassen Bruker, Dvalemodus forstår at det skal lagre “Bilde” eiendom som BLOB data-type.

4.4. Datavalidering

Vi henter dataene tilbake fra databasen og bruker Dvalemodus å kartlegge den tilbake til Java objekt for å sammenligne det med de innsatte dataene.

Siden vi kjenner den innsatte Brukers id, vil vi bruke den til å hente dataene fra databasen:

Brukerresultat = session.find (User.class, "1"); 

La oss sammenligne søkeresultatet med inngangen BrukerSine data:

assertNotNull ("Query result is null", result); assertEquals ("Brukerens navn er ugyldig", user.getName (), result.getName ()); assertTrue ("Brukerens bilde er ødelagt", Arrays.equals (user.getPhoto (), result.getPhoto ())); 

Dvalemodus vil tilordne dataene i databasen til Java objekt ved å bruke den samme kartinformasjonen på kommentarene.

Derfor hentet Bruker objektet vil ha samme informasjon som de innsatte dataene.

5. Konklusjon

LOB er datatype for lagring av store objektdata. Det er to varianter av LOB som kalles BLOB og CLOB. BLOB er for lagring av binære data, mens CLOB er for lagring av tekstdata.

Ved hjelp av Dvalemodus, vi har demonstrert hvordan det er ganske enkelt å kartlegge dataene til og fra Java objekter, så lenge vi definerer riktig datamodell og riktig tabellstruktur i databasen.

Som alltid er koden for denne artikkelen tilgjengelig på GitHub.


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