1.1 HQL चा परिचय
पूर्वी, तुमची हायबरनेटशी ओळख झाली होती, आणि आता मी तुमची ओळख HQL , उर्फ हायबरनेट क्वेरी लँग्वेजशी करून देईन . खरं तर, हायबरनेटमध्ये क्वेरी लिहिण्यासाठी हे एसक्यूएल रूपांतरित आहे. त्यात अनेक मुख्य फरक आहेत.
- टेबलच्या नावाऐवजी वर्गाचे नाव वापरणे .
- टेबल कॉलमच्या नावाऐवजी वर्ग फील्डचे नाव वापरणे .
- निवडीचा पर्यायी वापर.
चला हायबरनेटला डेटाबेसमध्ये असलेले सर्व वापरकर्ते आम्हाला परत करण्यास सांगू. ती विनंती कशी दिसेल ते येथे आहे:
from User
इतकेच, तुलनेसाठी, आम्ही SQL मध्ये समान क्वेरी सादर करतो:
select * from user
येथे User
वर्गाचे नाव आहे, आणि user
टेबलचे नाव आहे.
संपूर्ण Java कोड यासारखा दिसेल:
public List<User> getAllUsers() {
try (Session session = sessionFactory.openSession()) {
return session.createQuery("from User", User.class).list();
}
}
अन्यथा, HQL हे SQL सारखेच आहे - त्यात ऑपरेटर देखील आहेत:
WHERE
ORDER BY
GROUP BY
HAVING
1.2 HQL सह काम करण्याचे उदाहरण
कदाचित मागील उदाहरण समान सारणी आणि फील्ड नावांमुळे थोडे गोंधळात टाकणारे आहे. चला एक विशेष उदाहरण घेऊ या जिथे हे सोपे होईल.
समजा आमच्याकडे user_data टेबल आहे ज्यामध्ये खालील फील्ड आहेत:
- आयडी INT
- वापरकर्तानाव VARCHAR(100)
- user_level INT
- user_created DATE
आम्ही जावा क्लास तयार करू जो या टेबलवर मॅप करेल:
@Entity
@Table(name="user_data")
class User {
@Id
@GeneratedValue
public Integer id;
@Column(name="user_name")
public String name;
@Column(name="user_level")
public Integer level;
@Column(name="user_created")
public Date created;
}
आता काही उदाहरणे लिहू:
HQL | SQL |
---|---|
वापरकर्त्याकडून | user_data मधून * निवडा |
वापरकर्त्याकडून जेथे id=3 | user_data मधून * निवडा जेथे id=3 |
वापरकर्त्याकडून जेथे स्तर (10,20,30) | user_data मधून * निवडा जेथे user_level IN (10, 20, 30) |
तयार केलेल्या asc द्वारे वापरकर्ता ऑर्डरमधून | user_created asc द्वारे user_data ऑर्डरमधून * निवडा |
वापरकर्त्याकडून जेथे 'चाचणी' सारखे नाव | user_data मधून * निवडा जेथे user_name सारखे 'test' |
क्वेरी खूप सारख्या असतात आणि जेव्हा तुम्ही वर्गांची नावे आणि त्यांच्या फील्डशी परिचित असाल तेव्हा HQL क्वेरी वाचणे SQL क्वेरी वाचण्याइतकेच सोपे आहे. हे लिहिणे थोडे कठीण असू शकते, परंतु नंतर पुन्हा, खूप जटिल प्रश्न HQL मध्ये क्वचितच लिहिले जातात.
1.3 निवडा वापरणे
select
HQL मध्ये, जेव्हा परिणामाचा डेटा प्रकार मध्ये निर्दिष्ट केलेल्या प्रकाराशी जुळत नाही तेव्हा तुम्ही वापरू शकता from
.
उदाहरणार्थ, आम्हाला आमच्या user_data टेबलमध्ये असलेल्या सर्व वापरकर्त्यांची नावे मिळवायची आहेत , नंतर आम्हाला खालील क्वेरी लिहायची आहे:
select name from User
तसेच, नावांमध्ये डुप्लिकेट असल्यास, आपण ऑपरेटर वापरू शकता DISTINCT
:
select distinct name from User
उपनाम SQL प्रमाणेच कार्य करतात:
select distinct u.name from User u where u.created > '2020-01-01'
बरं, पूर्णपणे जावा कोडच्या स्वरूपात, ही विनंती यासारखी दिसेल:
public List<String> getUserNames() {
try (Session session = sessionFactory.openSession()) {
String hql = "select distinct u.name from User u where u.created > '2020-01-01'";
Query<String> query = session.createQuery(hql , String.class);
return query.list();
}
}
लक्षात ठेवा की क्वेरीने नावांची यादी दिली पाहिजे. नावे स्ट्रिंग प्रकाराची आहेत, त्यामुळे फंक्शनचा प्रकार आणि क्वेरी क्लासचे प्रकार पॅरामीटर दोन्ही प्रकार स्ट्रिंगचे आहेत.
GO TO FULL VERSION