Memetakan Data LOB dalam mode Hibernasi

1. Ikhtisar

LOB atau Large OBject mengacu pada tipe data panjang variabel untuk menyimpan objek besar.

Jenis data memiliki dua varian:

  • CLOB - Character Large Object akan menyimpan data teks berukuran besar
  • BLOB - Binary Large Object adalah untuk menyimpan data biner seperti gambar, audio, atau video

Dalam tutorial ini, kami akan menunjukkan bagaimana kita dapat memanfaatkan Hibernate ORM untuk mempertahankan objek besar.

2. Penyiapan

Misalnya, kami akan menggunakan Hibernate 5 dan H2 Database. Oleh karena itu kita harus mendeklarasikannya sebagai dependensi di pom.xml kita :

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

Versi terbaru dari dependensi tersebut ada di Maven Central Repositories.

Untuk melihat lebih dalam tentang cara mengonfigurasi Hibernate, lihat salah satu artikel pengantar kami.

3. Model Data LOB

Model "Pengguna" kami memiliki id, nama, dan foto sebagai properti. Kami akan menyimpan gambar di properti foto Pengguna , dan kami akan memetakannya ke BLOB:

@Entity @Table(name="user") public class User { @Id private String id; @Column(name = "name", columnDefinition="VARCHAR(128)") private String name; @Lob @Column(name = "photo", columnDefinition="BLOB") private byte[] photo; // ... }

The @Lob penjelasan menetapkan bahwa database harus menyimpan properti sebagai objek besar . The columnDefinition di @column penjelasan mendefinisikan jenis kolom untuk properti.

Karena kami akan menyimpan array byte , kami menggunakan BLOB.

4. Penggunaan

4.1. Mulai Sesi Hibernasi

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

Menggunakan kelas helper, kita akan membangun Sesi Hibernate menggunakan informasi database yang disediakan dalam file hibernate.properties .

4.2. Membuat Instance Pengguna

Mari kita asumsikan pengguna mengupload foto sebagai file gambar:

User user = new User(); InputStream inputStream = this.getClass() .getClassLoader() .getResourceAsStream("profile.png"); if(inputStream == null) { fail("Unable to get resources"); } user.setId("1"); user.setName("User"); user.setPhoto(IOUtils.toByteArray(inputStream)); 

Kami mengonversi file gambar menjadi array byte dengan menggunakan bantuan pustaka Apache Commons IO , dan akhirnya, kami menetapkan array byte sebagai bagian dari objek Pengguna yang baru dibuat .

4.3. Benda Besar yang Bertahan

Dengan menyimpan Pengguna menggunakan Sesi , Hibernasi akan mengubah objek menjadi catatan database:

session.persist(user); 

Karena @Lob penjelasan dideklarasikan pada kelas Pengguna , Hibernate mengerti harus menyimpan “foto” properti sebagai blob tipe data.

4.4. Validasi data

Kami akan mengambil kembali data dari database dan menggunakan Hibernate untuk memetakannya kembali ke objek Java untuk membandingkannya dengan data yang dimasukkan.

Karena kita tahu dimasukkan Pengguna ' s id , kami akan menggunakannya untuk mengambil data dari database:

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

Mari kita bandingkan hasil query dengan input data User :

assertNotNull( "Query result is null", result); assertEquals( "User's name is invalid", user.getName(), result.getName() ); assertTrue( "User's photo is corrupted", Arrays.equals(user.getPhoto(), result.getPhoto()) ); 

Hibernate akan memetakan data dalam database ke objek Java menggunakan informasi pemetaan yang sama pada anotasi.

Oleh karena itu, objek Pengguna yang diambil akan memiliki informasi yang sama dengan data yang dimasukkan.

5. Kesimpulan

LOB adalah tipe data untuk menyimpan data objek yang besar. Ada dua jenis LOB yang disebut BLOB dan CLOB . BLOB untuk menyimpan data biner, sedangkan CLOB untuk menyimpan data teks.

Menggunakan Hibernate , kami telah mendemonstrasikan betapa mudahnya memetakan data ke dan dari objek Java , selama kami menentukan model data yang benar dan struktur tabel yang sesuai dalam database.

Seperti biasa, kode untuk artikel ini tersedia di GitHub.