6.1 சர்வரில் கோப்புகளை சேமிக்கவும்
சில நேரங்களில் பைனரி பொருள்கள் தரவுத்தளத்தில் சேமிக்கப்பட வேண்டும். உதாரணமாக, கோப்புகள். கோப்பு பெரியதாக இருந்தால், அதை வட்டில் ஒரு தனி கோப்புறையில் சேமித்து, அதன் பாதைகளை தரவுத்தளத்தில் சேமிப்பது மிகவும் நியாயமானது. உதாரணமாக:
c:\db-files\users\12355\avatar.jpg
தரவுத்தளத்தில், கோப்பிற்கான தொடர்புடைய பாதையை மட்டுமே சேமித்து வைக்கிறோம்:
\12355\avatar.jpg
தரவுத்தளத்தில் தொடர்புடைய பாதையைச் சேமிப்பது வசதியானது, ஏனெனில் அதிலிருந்து ஒரு URL ஐப் பெறுவது எளிது:
https://storage.codegym.cc/users/12355/avatar.jpg
சர்வர் பெயருடன் தொடர்புடைய பாதையை ஒட்டுகிறோம், முடித்துவிட்டோம்.
6.2 படங்களை நேரடியாக தரவுத்தளத்தில் சேமிக்கவும்
இருப்பினும், படங்கள் சிறியதாக இருந்தால், அவற்றை நேரடியாக தரவுத்தளத்தில் சேமித்து வாடிக்கையாளர்களுக்கு பைட்டுகளின் தொகுப்பாக வழங்கலாம். இதுபோன்ற சந்தர்ப்பங்களில், SQL ஒரு சிறப்பு BLOB தரவு வகையைக் கொண்டுள்ளது - பைனரி பெரிய பொருள். அல்லது, அவற்றில் இரண்டு கூட உள்ளன:
- CLOB - எழுத்து பெரிய பொருள்,
- BLOB - பைனரி பெரிய பொருள்.
CLOB மிகப் பெரிய நூல்களைச் சேமிக்கப் பயன்படுகிறது. 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;
// ...
}
சிறுகுறிப்பு @Lob
ஹைபர்னேட்டிடம் ஒரு பெரிய பொருள் புலத்தில் சேமிக்கப்பட்டுள்ளது என்று கூறுகிறது . columnDefinition="BLOB"
தரவுத்தளத்தில் அனைத்தையும் எவ்வாறு சேமிப்பது என்பது பற்றி ஏற்கனவே பேசுகிறது .
ஒரு புதிய பயனரையும் அவரது புகைப்படத்தையும் தரவுத்தளத்தில் சேமிக்கும் உதாரணக் குறியீட்டை எழுதுவோம்:
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 மற்றும் JSON
ஹைபர்னேட் ஒரு தரவு வகையாக JSONக்கு சுவாரஸ்யமான ஆதரவைக் கொண்டுள்ளது. சரங்களின் HashMap ஐ ஒரு JSON பொருளாக சேமிக்க இது உங்களை அனுமதிக்கிறது. DBMS ஆனது JSON உடன் வேலை செய்ய முடிந்தால், அது இப்படி இருக்கும்:
@JdbcTypeCode(SqlTypes.JSON)
private Map<String, String> properties;
Map<String, String>
வகை பொருள் ஒரே JSON பொருளாக வரிசைப்படுத்தப்படுவதை ஹைபர்னேட் கவனித்துக்கொள்கிறது . மேலும், தரவுத்தளத்திலிருந்து ஒரு பொருளைப் படிக்கும்போது, அது JSON பொருளை ஒரு தொகுப்பாக மாற்றுகிறது Map<String, String>
.
ஹைபர்னேட் XML உடன் இதே போன்ற ஒன்றைச் செய்யலாம்:
@JdbcTypeCode(SqlTypes.SQLXML)
private Map<String, String> properties;