Kortlægning af LOB-data i dvale

1. Oversigt

LOB eller Large OBject henviser til en datatype med variabel længde til lagring af store objekter.

Datatypen har to varianter:

  • CLOB - Karakter stort objekt gemmer store tekstdata
  • BLOB - Binært stort objekt er til lagring af binære data som billede, lyd eller video

I denne vejledning viser vi, hvordan vi kan bruge Hibernate ORM til vedvarende store objekter.

2. Opsætning

For eksempel bruger vi Hibernate 5 og H2 Database. Derfor må vi erklære dem som afhængigheder i vores pom.xml:

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

Den seneste version af afhængighederne findes i Maven Central Repositories.

For et mere dybtgående kig på konfiguration af dvale henvises til en af ​​vores indledende artikler.

3. LOB-datamodel

Vores model "Bruger" har id, navn og foto som egenskaber. Vi gemmer et billede i Bruger'S fotoejendom, og vi kortlægger den til en BLOB:

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

Det @Lob annotation angiver, at databasen skal gemme ejendommen som Stort objekt. Det columnDefinition i @Kolonne annotation definerer kolonnetypen for ejendommen.

Da vi skal spare byte-array, vi bruger BLOB.

4. Anvendelse

4.1. Start dvale-session

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

Ved hjælp af hjælperklassen vil vi opbygge Dvalesession ved hjælp af databaseoplysningerne i dvale.egenskaber fil.

4.2. Oprettelse af brugerinstans

Lad os antage, at brugeren uploader billedet som en billedfil:

Brugerbruger = ny bruger (); InputStream inputStream = this.getClass () .getClassLoader () .getResourceAsStream ("profile.png"); hvis (inputStream == null) {fail ("Kan ikke hente ressourcer"); } user.setId ("1"); user.setName ("Bruger"); user.setPhoto (IOUtils.toByteArray (inputStream)); 

Vi konverterer billedfilen til byte-array ved hjælp af Apache Commons IO bibliotek, og til sidst tildeler vi byte-arrayet som en del af det nyoprettede Bruger objekt.

4.3. Vedvarende stort objekt

Ved at opbevare Bruger bruger Session, det Dvale konverterer objektet til databaseposten:

session.persist (bruger); 

På grund af @Lob kommentar erklæret på klassen Bruger, Dvale forstår, at det skal gemme "Foto" ejendom som BLOB datatype.

4.4. Data validering

Vi henter dataene tilbage fra databasen og bruger dem Dvale at kortlægge det tilbage til Java modsætter sig at sammenligne det med de indsatte data.

Da vi kender det indsatte Brugers id, vi bruger det til at hente dataene fra databasen:

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

Lad os sammenligne forespørgslens resultat med input Bruger'S data:

assertNotNull ("Forespørgselsresultat er null", resultat); assertEquals ("Brugerens navn er ugyldigt", user.getName (), result.getName ()); assertTrue ("Brugerens foto er beskadiget", Arrays.equals (user.getPhoto (), result.getPhoto ())); 

Dvale vil kortlægge dataene i databasen til Java objekt ved hjælp af de samme kortoplysninger på kommentarerne.

Derfor hentet Bruger objektet vil have de samme oplysninger som de indsatte data.

5. Konklusion

LOB er datatype til lagring af store objektdata. Der er to varianter af LOB som kaldes BLOB og CLOB. BLOB er til lagring af binære data, mens CLOB er til lagring af tekstdata.

Ved brug af Dvale, vi har demonstreret, hvordan det er ret nemt at kortlægge dataene til og fra Java objekter, så længe vi definerer den korrekte datamodel og den relevante tabelstruktur i databasen.

Som altid er koden til denne artikel tilgængelig på GitHub.


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