1.1 एचक्यूएल का परिचय

पहले, आप हाइबरनेट से परिचित हो गए थे, और अब मैं आपको एचक्यूएल उर्फ ​​​​हाइबरनेट क्वेरी लैंग्वेज से परिचित कराऊंगा । वास्तव में, यह SQL को हाइबरनेट में प्रश्न लिखने के लिए परिवर्तित किया गया है। इसके कई प्रमुख अंतर हैं।

  1. तालिका के नाम के बजाय कक्षा के नाम का उपयोग करना ।
  2. तालिका स्तंभ नाम के बजाय वर्ग फ़ील्ड नाम का उपयोग करना ।
  3. चयन का वैकल्पिक उपयोग।

आइए हाइबरनेट से डेटाबेस में मौजूद सभी उपयोगकर्ताओं को वापस करने के लिए कहें। यहाँ वह अनुरोध कैसा दिखेगा:

from User

बस इतना ही, तुलना के लिए, हम SQL में एक समान क्वेरी प्रस्तुत करते हैं:

select * from user

यहाँ Userवर्ग का नाम है, और userतालिका का नाम है।

पूरा जावा कोड इस तरह दिखेगा:


public List<User> getAllUsers() {
    try (Session session = sessionFactory.openSession()) {
            return session.createQuery("from User", User.class).list();
    }
}

अन्यथा, एचक्यूएल एसक्यूएल के समान ही है - इसमें ऑपरेटर भी हैं:

  • WHERE
  • ORDER BY
  • GROUP BY
  • HAVING

1.2 एचक्यूएल के साथ काम करने का उदाहरण

शायद पिछला उदाहरण समान तालिका और फ़ील्ड नामों के कारण थोड़ा भ्रमित करने वाला है। आइए एक विशेष उदाहरण के साथ आते हैं जहां यह आसान होगा।

मान लीजिए कि हमारे पास एक user_data तालिका है जिसमें निम्नलिखित फ़ील्ड हैं:

  • आईडी आईएनटी
  • उपयोगकर्ता नाम 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;
}

अब कुछ उदाहरण लिखते हैं:

एचक्यूएल एसक्यूएल
उपयोगकर्ता से User_data से * चुनें
उपयोगकर्ता से जहां आईडी = 3 user_data से * चुनें जहां आईडी = 3
उपयोगकर्ता से जहां स्तर (10,20,30) user_data से * चुनें जहां user_level IN (10, 20, 30)
उपयोक्ता क्रम से बनाया गया एएससी user_created asc द्वारा user_data ऑर्डर से * चुनें
उपयोगकर्ता से जहां 'परीक्षण' जैसा नाम है user_data से * का चयन करें जहां user_name 'परीक्षण' की तरह है

प्रश्न बहुत समान हैं, और जब आप कक्षा के नाम और उनके क्षेत्रों से परिचित हैं तो एचक्यूएल प्रश्नों को पढ़ना एसक्यूएल प्रश्नों को पढ़ने जितना आसान है। इसे लिखना थोड़ा और कठिन हो सकता है, लेकिन फिर, एचक्यूएल में बहुत जटिल प्रश्न शायद ही कभी लिखे जाते हैं।

1.3 चयन का उपयोग करना

एचक्यूएल में, आप तब उपयोग कर सकते हैं selectजब परिणाम का डेटा प्रकार निर्दिष्ट प्रकार से मेल नहीं खाता है 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();
    }
}

ध्यान दें कि क्वेरी को नामों की एक सूची वापस करनी चाहिए। नाम प्रकार स्ट्रिंग के होते हैं, इसलिए फ़ंक्शन के प्रकार और क्वेरी वर्ग के प्रकार पैरामीटर दोनों प्रकार के स्ट्रिंग होते हैं।