6.1 Simpan fail pada pelayan

Kadangkala objek binari perlu disimpan ke pangkalan data. Contohnya, fail. Jika fail itu besar, maka adalah paling munasabah untuk menyimpannya dalam folder berasingan pada cakera, dan menyimpan laluannya dalam pangkalan data. Contoh:

c:\db-files\users\12355\avatar.jpg

Dan dalam pangkalan data kami hanya menyimpan laluan relatif ke fail:

\12355\avatar.jpg

Adalah mudah untuk menyimpan laluan relatif dalam pangkalan data, kerana mudah untuk mendapatkan URL daripadanya:

https://storage.codegym.cc/users/12355/avatar.jpg

Kami hanya menampal laluan relatif kepada nama pelayan dan kami sudah selesai.

6.2 Simpan imej terus dalam pangkalan data

Walau bagaimanapun, jika gambar kecil, ia boleh disimpan terus dalam pangkalan data dan diberikan kepada pelanggan sebagai satu set bait. Untuk kes sedemikian, SQL mempunyai jenis data BLOB khas - Binary Large Object. Atau sebaliknya, terdapat dua daripadanya:

  • CLOB - Objek Besar Watak,
  • BLOB - Objek Besar Binari.

CLOB digunakan untuk menyimpan teks yang sangat besar. BLOB adalah untuk menyimpan data binari, seperti gambar kecil, video dan seumpamanya.

Contoh:

@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;

	// ...
}

Anotasi @Lobmemberitahu Hibernate bahawa Objek Besar disimpan dalam medan . Dan columnDefinition="BLOB"sudah bercakap tentang cara menyimpan semuanya dalam pangkalan data.

Mari tulis kod contoh yang menyimpan pengguna baharu dan fotonya ke pangkalan data:

byte[] imageBuffer = Files.readAllBytes(Paths.get("C:/temp/avatar.png"))

User user = new User();
user.setId("1");
user.setName("Zapp");
user.setPhoto(imageBuffer);

session.persist(user);

6.3 XML dan JSON

Hibernate mempunyai sokongan yang menarik untuk JSON sebagai jenis data. Ia membolehkan anda menyimpan HashMap rentetan sebagai objek JSON tunggal. Jika DBMS boleh berfungsi dengan JSON, maka ia kelihatan seperti ini:

@JdbcTypeCode(SqlTypes.JSON)
private Map<String, String> properties;

Hibernate menjaga agar objek jenis Map<String, String>disirikan ke dalam satu objek JSON. Selain itu, apabila membaca objek daripada pangkalan data, ia menukar objek JSON menjadi satu set Map<String, String>.

Hibernate boleh melakukan sesuatu yang serupa dengan XML:

@JdbcTypeCode(SqlTypes.SQLXML)
private Map<String, String> properties;