6.1 Dosyaları sunucuda saklayın

Bazen ikili nesnelerin veritabanına kaydedilmesi gerekir. Örneğin, dosyalar. Dosya büyükse, onu diskte ayrı bir klasörde saklamak ve yollarını veritabanında saklamak en mantıklısı. Örnek:

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

Ve veritabanında, dosyanın yalnızca göreli bir yolunu saklarız:

\12355\avatar.jpg

Veritabanında göreceli bir yol saklamak uygundur, çünkü o zaman ondan bir URL almak kolaydır:

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

Sadece ilgili yolu sunucu adına yapıştırıyoruz ve işimiz bitiyor.

6.2 Görüntüleri doğrudan veritabanında saklayın

Ancak resimler küçükse, doğrudan veritabanında saklanabilir ve müşteriye bir bayt kümesi olarak verilebilir. Bu tür durumlar için SQL'in özel bir BLOB veri türü vardır - İkili Büyük Nesne. Daha doğrusu, iki tane bile var:

  • CLOB - Karakter Büyük Nesnesi,
  • BLOB - İkili Büyük Nesne.

CLOB, çok büyük metinleri depolamak için kullanılır. BLOB, küçük resimler, videolar ve benzerleri gibi ikili verileri depolamak içindir.

Örnek:

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

	// ...
}

Ek açıklama, Hazırda Bekletme durumuna, alanda bir Büyük Nesnenin@Lob saklandığını söyler . Ve zaten hepsini veritabanına nasıl kaydedeceğinizden bahsediyor.columnDefinition="BLOB"

Yeni bir kullanıcıyı ve fotoğrafını veritabanına kaydeden bir örnek kod yazalım:

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 ve JSON

Hazırda Bekletme, bir veri türü olarak JSON için ilginç bir desteğe sahiptir. Bir HashMap dizisini tek bir JSON nesnesi olarak saklamanıza izin verir. DBMS, JSON ile çalışabiliyorsa, şöyle görünür:

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

Map<String, String>Hazırda bekletme, tür nesnesinin tek bir JSON nesnesine seri hale getirilmesini sağlar . Ayrıca, veritabanından bir nesne okurken, JSON nesnesini bir Map<String, String>.

Hibernate, XML ile benzer bir şey yapabilir:

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