CodeGym/Java Course/All lectures for HI purposes/मापदंडों के साथ अनुरोध

मापदंडों के साथ अनुरोध

उपलब्ध

4.1 अनुरोधों के लिए पैरामीटर

हाइबरनेट आपको प्रश्नों के पैरामीटर पास करने की अनुमति देता है। इस प्रकार, प्रश्नों और डेटाबेस के साथ सभी कार्य बहुत सरल हो जाते हैं।

अपरिवर्तनीय प्रश्नों को खोजना बहुत दुर्लभ है। सबसे पहले, ऐसा लगता है कि आपको केवल डेटाबेस से सामानों की सूची वापस करने की आवश्यकता है। और फिर यह पता चला है कि आपको किसी विशिष्ट उपयोगकर्ता के लिए किसी विशिष्ट तिथि पर उत्पादों की एक अद्यतित सूची की आवश्यकता है। आवश्यक फ़ील्ड द्वारा क्रमबद्ध, और अभी तक पूरी सूची नहीं, बल्कि एक विशिष्ट पृष्ठ: उदाहरण के लिए, 21 से 30 तक के उत्पाद।

और यह वही है जो पैरामिट्रीकृत प्रश्न हल करते हैं। आप एचक्यूएल में एक प्रश्न लिखते हैं, और फिर आप उन मानों को प्रतिस्थापित करते हैं जिन्हें "विशेष नाम" - पैरामीटर के साथ बदला जा सकता है। और फिर अनुरोध को निष्पादित करते समय अलग से, आप इन मापदंडों के मूल्यों को पारित कर सकते हैं।

आइए एक एचक्यूएल क्वेरी लिखें जो एक विशिष्ट नाम वाले उपयोगकर्ता के लिए सभी कार्यों को वापस कर देगी:

from EmployeeTask where employee.name = "Ivan Ivanovich"

अब नाम को पैरामीटर से बदलें:

from EmployeeTask where employee.name = :username

और कार्यों को खोजने के लिए हमारा जावा कोड इस तरह दिखेगा:

String hql = "from EmployeeTask where employee.name = :username";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter("username", "Ivan Ivanovich");
List<EmployeeTask> resultLIst = query.list();

साथ ही, पैरामीटर नाम के बजाय, आप केवल एक संख्या का उपयोग कर सकते हैं:

String hql = "from EmployeeTask where employee.name = :1";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter(1, "Ivan Ivanovich");
List<EmployeeTask> resultLIst = query.list();

हालांकि, बेशक, नाम का उपयोग करना बेहतर है - ऐसे कोड को पढ़ना और बनाए रखना बहुत आसान है।

4.2 सेट पैरामीटर सूची () विधि।

ऐसे मामले भी होते हैं जब पैरामीटर मान एक नहीं होता है, लेकिन वस्तुओं की एक सूची का प्रतिनिधित्व करता है। उदाहरण के लिए, हम यह जांचना चाहते हैं कि कर्मचारियों के पेशे एक निश्चित सूची में शामिल हैं।

यह कैसे किया जा सकता है:


String hql = "from EmployeeTask where occupation IN (:occupation_list)";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameterList("occupation_list", new String[] {"Programmer", "Tester"});
List<EmployeeTask> resultLIst = query.list();

4 प्रकार की सूची को पैरामीटर मान के रूप में पारित किया जा सकता है:

  • वस्तुओं की सरणी: वस्तु []
  • संग्रह: संग्रह
  • टाइप की गई सरणी: टी []
  • टाइप किया गया संग्रह: संग्रह <टी>

यदि आप टाइप किए गए संग्रह या सरणी को पास करने का निर्णय लेते हैं, तो आपको डेटा प्रकार को तीसरे पैरामीटर के रूप में पास करना होगा। उदाहरण:


String hql = "from EmployeeTask where occupation IN (:occupation_list)";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameterList("occupation_list", new String[] {"Programmer", "Tester"}, String.class);
List<EmployeeTask> resultLIst = query.list();

सूची पैरामीटर के साथ कार्य करते समय, आप पैरामीटर नाम के स्थान पर संख्या का उपयोग भी कर सकते हैं। लेकिन फिर से, नाम अधिक सुविधाजनक है।

4.3 SQL इंजेक्शन से सुरक्षा

मापदंडों के सबसे महत्वपूर्ण उद्देश्यों में से एक डेटाबेस को SQL इंजेक्शन से बचाना है। कई नौसिखिए प्रोग्रामर, मापदंडों का उपयोग करने के बजाय, बस कई हिस्सों की एक स्ट्रिंग को एक साथ चिपका देंगे।

इस तरह लिखने के बजाय:

String hql = "from EmployeeTask where employee.name = :username";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter("username", "Ivan Ivanovich");
List<EmployeeTask> resultLIst = query.list();

इस तरह लिखेंगे:

String hql = "from EmployeeTask where employee.name = " + "Ivan Ivanovich";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
List<EmployeeTask> resultLIst = query.list();

ऐसा कभी नहीं करें!एकाधिक भागों से SQL/HQL क्वेरी को एक साथ न रखें। क्योंकि जल्दी या बाद में उपयोगकर्ता नाम क्लाइंट से आपके पास आएगा। और दुष्ट हैकर आपको एक तार की तरह देगा""Ivan"; DROP TABLE user;"

और फिर डेटाबेस के लिए आपकी क्वेरी फॉर्म लेगी:

from EmployeeTask where employee.name = "Ivan"; DROP TABLE user;

और यह अभी भी अच्छा है अगर आपका डेटा केवल हटा दिया गया है। आप इस तरह भी लिख सकते हैं:

from EmployeeTask where employee.name = "Ivan";
UPDATE user SET password = '1' WHERE user.role = 'admin'

या इस तरह:

from EmployeeTask where employee.name = "Ivan";
UPDATE user SET role = 'admin' WHERE user.id = 123;
टिप्पणियां
  • लोकप्रिय
  • नया
  • पुराना
टिप्पणी लिखने के लिए आपको साइन इन करना होगा
इस पेज पर अभी तक कोई टिप्पणियां नहीं हैं