JavaRush /Kurslar /All lectures for UZ purposes /Obyektlarni Mapping qilish

Obyektlarni Mapping qilish

All lectures for UZ purposes
Daraja, Dars
Mavjud

6.1 Fayllarni serverda saqlash

Ba'zan ma'lumotlar bazasida binar obyektlarni saqlash kerak bo'ladi. Masalan, fayllar. Agar fayl katta bo'lsa, uni diskdagi alohida papkada saqlash, va ma'lumotlar bazasida uning yo'lini saqlash oqilona bo'ladi. Misol:

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

Va ma'lumotlar bazasida biz faqat faylga nisbatan yo'lni saqlaymiz:

\12355\avatar.jpg

Ma'lumotlar bazasida nisbatan yo'lni saqlash qulay, chunki undan keyin URL ni olish oson:

https://storage.javarush.ru/users/12355/avatar.jpg

Biz shunchaki nisbatan yo'lni server nomiga ulaymiz va tayyor.

6.2 Rasmlarni to'g'ridan-to'g'ri bazada saqlash

Biroq, agar rasmlar kichik bo'lsa, ularni to'g'ridan-to'g'ri bazada saqlash va mijozga baytlar to'plami sifatida berish mumkin. Bunday hollarda SQLda maxsus ma'lumot turi mavjud – BLOB – Binary Large Object. Aniqrog'i, ular hatto ikkita:

  • CLOB – Character Large Object,
  • BLOB – Binary Large Object.

CLOB juda katta matnlarni saqlash uchun ishlatiladi. BLOB esa kichik rasmlar, video va shunga o'xshash binar ma'lumotlarni saqlash uchun ishlatiladi.

Misol:


@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;
 
	// ...
}

Annotatsiya @Lob Hibernatega, bu maydonda Large Object saqlanishini bildiradi. A columnDefinition="BLOB" esa uni qanday qilib bazada saqlashni bildiradi.

Keling yangi foydalanuvchini va uning fotosuratini bazaga saqlaydigan kod yozamiz:


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

Hibernate JSONni ma'lumot tur sifatida qiziqarli qo'llab-quvvatlaydi. U HashMap qatorlarini yagona JSON obyekt sifatida saqlash imkonini beradi. Agar SUBD JSON bilan ishlay olsa, u quyidagicha ko'rinadi:


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

Hibernate Map<String, String> obyektini yagona JSON obyektga seriyalashtirishni o'z zimmasiga oladi. Baza obyektini o'qiyotganda ham JSON obyektni Map<String, String> to'plamiga aylantiradi.

Shunga o'xshash narsani Hibernate XML bilan ham qilishi mumkin:


@JdbcTypeCode(SqlTypes.SQLXML)
private Map<String, String> properties;
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION