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 కోసం ఆసక్తికరమైన మద్దతును కలిగి ఉంది. ఇది ఒకే JSON ఆబ్జెక్ట్గా స్ట్రింగ్ల HashMapని నిల్వ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. 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;