Named Query এবং Parameterized Query হল NHibernate এ ডেটাবেস থেকে ডেটা রিট্রাইভ করতে ব্যবহৃত দুটি জনপ্রিয় কৌশল। এগুলি HQL (Hibernate Query Language) বা Criteria API এর মাধ্যমে ডেটা ফেচিং অপারেশনকে আরও সহজ এবং কার্যকর করে তোলে।
Named Query
Named Query হল একটি পূর্বনির্ধারিত কোয়েরি যেটি একটি নির্দিষ্ট নাম দিয়ে তৈরি করা হয় এবং পরে সেই নাম ব্যবহার করে কোয়েরি এক্সিকিউট করা হয়। এতে কোডের পুনঃব্যবহারযোগ্যতা এবং রিডেবিলিটি বৃদ্ধি পায়, কারণ কোয়েরি কোডের মধ্যে বারবার লিখতে হয় না, শুধু একবার নাম দিয়ে সেটি সংজ্ঞায়িত করে পরে ডেটা অ্যাক্সেস করা যায়।
Named Query কনফিগারেশন
Named Query সাধারণত hibernate.cfg.xml বা mapping ফাইলে সংজ্ঞায়িত করা হয়। একটি Named Query কনফিগারেশন ফাইলের মাধ্যমে ব্যবহার করা হয় যেমন:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<mapping class="YourNamespace.Customer"/>
<query name="findCustomersByCity">
<![CDATA[
from Customer c where c.City = :city
]]>
</query>
</session-factory>
</hibernate-configuration>
এখানে, findCustomersByCity নামক Named Query তৈরি করা হয়েছে যা Customer নামক টেবিল থেকে City ফিল্ডের ভিত্তিতে ডেটা ফেচ করবে।
Named Query ব্যবহার
কোডে Named Query ব্যবহার করার উদাহরণ:
using (var session = NHibernateHelper.SessionFactory.OpenSession())
{
var query = session.GetNamedQuery("findCustomersByCity")
.SetParameter("city", "Dhaka");
var customers = query.List<Customer>(); // Customers from Dhaka
}
এখানে session.GetNamedQuery("findCustomersByCity") এর মাধ্যমে findCustomersByCity নামক কোয়েরি এক্সিকিউট করা হচ্ছে এবং .SetParameter("city", "Dhaka") এর মাধ্যমে city প্যারামিটার প্রদান করা হচ্ছে।
Parameterized Query
Parameterized Query হল এমন একটি কোয়েরি যেখানে প্যারামিটার ব্যবহার করে কুয়েরি ডাইনামিকভাবে তৈরি করা হয়। এটি নিরাপদ এবং কার্যকর কৌশল, কারণ এর মাধ্যমে SQL ইনজেকশন এড়ানো যায় এবং কোডের রিডেবিলিটি বাড়ানো যায়। প্যারামিটারাইজড কোয়েরি লিখে ডেটাবেস থেকে ডেটা ফেচ করা হয়।
Parameterized Query কনফিগারেশন
Parameterized Query এর মাধ্যমে SQL বা HQL কোয়েরিতে প্যারামিটার যোগ করা হয়। উদাহরণস্বরূপ:
using (var session = NHibernateHelper.SessionFactory.OpenSession())
{
var query = session.CreateQuery("from Customer c where c.City = :city")
.SetParameter("city", "Dhaka");
var customers = query.List<Customer>(); // Customers from Dhaka
}
এখানে, :city হল প্যারামিটার, এবং .SetParameter("city", "Dhaka") এর মাধ্যমে প্যারামিটারটি Dhaka এর মান দেওয়া হয়েছে।
Parameterized Query এর সুবিধা
- SQL Injection থেকে সুরক্ষা: প্যারামিটারাইজড কোয়েরি SQL ইনজেকশন প্রতিরোধে সহায়তা করে, কারণ প্যারামিটারগুলো কোয়েরির অংশ হিসেবে সুরক্ষিতভাবে ইনপুট হয়।
- ডাইনামিক কোয়েরি তৈরি: প্যারামিটার ব্যবহার করে কোয়েরি তৈরি করা যেতে পারে, যা বিভিন্ন মানের জন্য পুনরায় ব্যবহারযোগ্য।
Named Query এবং Parameterized Query এর মধ্যে পার্থক্য
- Named Query একটি পূর্বনির্ধারিত কোয়েরি যা একবার সংজ্ঞায়িত করার পরে বারবার ব্যবহার করা যায়, যেখানে Parameterized Query একটি ডাইনামিক কোয়েরি যেটি runtime এ প্যারামিটার গ্রহণ করে।
- Named Query সাধারণত কোডের বাইরে hibernate.cfg.xml বা mapping ফাইলে সংজ্ঞায়িত হয়, কিন্তু Parameterized Query কোডে সরাসরি HQL বা Criteria API ব্যবহার করে তৈরি করা হয়।
এভাবে, Named Query এবং Parameterized Query উভয়ই NHibernate এ ডেটাবেস অ্যাক্সেসের জন্য ব্যবহার করা যায়, তবে নির্দিষ্ট প্রয়োজন এবং প্রয়োজনে একেকটি উপকারী হতে পারে।
Read more