Named Queries এবং Dynamic Queries

Query Language (JPQL) - জেপিএ  (JPA) - Java Technologies

339

JPA (Java Persistence API) ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করার জন্য ব্যবহার করা একটি শক্তিশালী প্রযুক্তি। এর মাধ্যমে আপনি queries তৈরি করে ডেটাবেসে ডেটা অনুসন্ধান করতে পারেন। JPA-তে দুটি ধরনের কুয়েরি ব্যবহার করা হয়: Named Queries এবং Dynamic Queries

এগুলির মধ্যে পার্থক্য এবং ব্যবহার বিস্তারিতভাবে এখানে আলোচনা করা হবে।

Named Queries


Named Queries হল JPQL (Java Persistence Query Language) কুয়েরি যা JPA Entity ক্লাসের সাথে সংজ্ঞায়িত করা হয় এবং একটি নাম দিয়ে পুনঃব্যবহারযোগ্য করে তোলা হয়। এই ধরনের কুয়েরি কমপাইল টাইমে নির্ধারিত থাকে এবং এগুলির নামের মাধ্যমে সেগুলি সার্চ করা হয়।

Named Queries সাধারণত Entity ক্লাসের মধ্যে @Query বা @NamedQuery অ্যানোটেশন ব্যবহার করে ডিফাইন করা হয়।

Named Queries ব্যবহারের সুবিধা:

  • পুনঃব্যবহারযোগ্যতা: একই কুয়েরি একাধিক জায়গায় ব্যবহার করা যায়।
  • পারফরম্যান্স: Named Queries অনেক বেশি কার্যকরী, কারণ এগুলি Entity Manager দ্বারা কম্পাইল টাইমে পার্স করা হয়।
  • সাবধানতা: কুয়েরি নামের মাধ্যমে ক্লায়েন্ট বা ডেভেলপার নির্দিষ্ট কুয়েরি অ্যাক্সেস করতে পারেন, যা ডেটাবেস কোডের নিরাপত্তা এবং রক্ষণাবেক্ষণ সহজ করে।

Named Query এর উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQuery;

@Entity
@NamedQuery(name = "User.findByName", query = "SELECT u FROM User u WHERE u.name = :name")
public class User {
    @Id
    private Long id;
    private String name;
    private int age;

    // Getter and Setter methods
}

এখানে, User.findByName নামে একটি Named Query তৈরি করা হয়েছে যা ব্যবহারকারীর নাম অনুসারে ডেটা ফেরত দেবে।

Named Query ব্যবহার করার উদাহরণ:

TypedQuery<User> query = entityManager.createNamedQuery("User.findByName", User.class);
query.setParameter("name", "John Doe");
List<User> users = query.getResultList();

এখানে, createNamedQuery() মেথড ব্যবহার করে Named Query User.findByName থেকে ডেটা ফেচ করা হয়েছে।


Dynamic Queries


Dynamic Queries হল কুয়েরি যা রানটাইমে তৈরি করা হয়। এগুলি সাধারণত Criteria API বা JPQL এর মাধ্যমে ডাইনামিকভাবে তৈরি করা হয়। Dynamic Queries ব্যবহার করা হয় যখন কুয়েরি টাইপ বা ফিল্টার প্যারামিটার রানটাইমে জানা যায় না এবং যেগুলি ডাটাবেসের শর্ত বা ব্যবহারকারীর ইনপুটের উপর ভিত্তি করে পরিবর্তিত হতে পারে।

Dynamic Queries এর সুবিধা:

  • অবজেক্ট-ওরিয়েন্টেড: Criteria API ব্যবহারের মাধ্যমে আপনি Java অবজেক্টের মাধ্যমে কুয়েরি তৈরি করতে পারেন, যা কোডের রিডেবিলিটি এবং মেইনটেনেন্স বৃদ্ধি করে।
  • ফ্লেক্সিবিলিটি: রানটাইমে কুয়েরির শর্ত বা প্যারামিটার পরিবর্তন করা যায়।
  • কমপ্লেক্স কুয়েরি সমাধান: যখন কমপ্লেক্স ডেটা ফিল্টারিং বা প্যারামিটার ফিল্টার করার প্রয়োজন হয়, Dynamic Queries খুবই কার্যকর।

Dynamic Query Example (JPQL)

String jpql = "SELECT u FROM User u WHERE u.age > :age AND u.city = :city";
TypedQuery<User> query = entityManager.createQuery(jpql, User.class);
query.setParameter("age", 25);
query.setParameter("city", "New York");
List<User> users = query.getResultList();

এখানে, age এবং city প্যারামিটার সহ একটি JPQL কুয়েরি রানটাইমে তৈরি করা হয়েছে এবং ক্লায়েন্টের ইনপুট অনুসারে কুয়েরি চালানো হচ্ছে।

Dynamic Query Example (Criteria API)

Criteria API একটি অবজেক্ট-ওরিয়েন্টেড কুয়েরি তৈরি করার জন্য ব্যবহৃত হয়। এটি ডাইনামিক কুয়েরি তৈরির জন্য আরও কার্যকরী এবং শক্তিশালী পদ্ধতি।

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<User> criteriaQuery = criteriaBuilder.createQuery(User.class);
Root<User> root = criteriaQuery.from(User.class);

Predicate agePredicate = criteriaBuilder.greaterThan(root.get("age"), 25);
Predicate cityPredicate = criteriaBuilder.equal(root.get("city"), "New York");

criteriaQuery.select(root).where(criteriaBuilder.and(agePredicate, cityPredicate));

TypedQuery<User> query = entityManager.createQuery(criteriaQuery);
List<User> users = query.getResultList();

এখানে, Criteria API ব্যবহার করে age এবং city এর শর্তে ডাইনামিক কুয়েরি তৈরি করা হয়েছে।


Named Queries এবং Dynamic Queries এর মধ্যে পার্থক্য

বৈশিষ্ট্যNamed QueriesDynamic Queries
ডিফাইনেশনকমপাইল টাইমে ডিফাইন করা হয় (অ্যানোটেশন বা XML এর মাধ্যমে)রানটাইমে তৈরি করা হয় (JPQL অথবা Criteria API দিয়ে)
ফ্লেক্সিবিলিটিসীমিত, কারণ কুয়েরি আগে থেকেই নির্ধারিত থাকেঅধিক, কারণ কুয়েরি শর্ত রানটাইমে পরিবর্তন করা যায়
পারফরম্যান্সঅধিক কার্যকরী, কারণ এটি আগে থেকেই কম্পাইল হয়কম কার্যকরী, কারণ কুয়েরি রানটাইমে তৈরি হয়
ব্যবহারসাধারণ এবং একাধিক জায়গায় পুনরাবৃত্তি করা যেতে পারেযখন কুয়েরির শর্ত বা ফিল্টার পরিবর্তনশীল হয়
টেমপ্লেটিংকুয়েরি স্ট্যাটিক এবং পুনঃব্যবহারযোগ্যকুয়েরি ডাইনামিক এবং পরিবর্তনশীল

সারাংশ


  • Named Queries হল পূর্বনির্ধারিত, স্ট্যাটিক কুয়েরি যা Entity ক্লাসে @NamedQuery অথবা XML ফাইলে সংজ্ঞায়িত করা হয় এবং একাধিক জায়গায় পুনঃব্যবহার করা যায়। এটি কম্পাইল টাইমে নির্ধারিত এবং ভালো পারফরম্যান্স প্রদান করে।
  • Dynamic Queries হল কুয়েরি যা রানটাইমে তৈরি হয়, বিশেষ করে যখন শর্ত বা ফিল্টার ডেটা ব্যবহারকারী ইনপুট বা অন্যান্য পরিবর্তনশীল উপাদানের উপর ভিত্তি করে পরিবর্তিত হয়। এটি বেশি ফ্লেক্সিবল, তবে এর পারফরম্যান্স কিছুটা কম হতে পারে।

JPA তে কুয়েরি ব্যবহারের জন্য Named Queries এবং Dynamic Queries উভয়ই খুব গুরুত্বপূর্ণ, এবং তাদের সুবিধা অনুযায়ী বিভিন্ন পরিস্থিতিতে ব্যবহার করা যেতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...