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;
GO TO FULL VERSION