Skill

JPQL এর মাধ্যমে Joins এবং Aggregate Functions ব্যবহার

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

286

JPQL (Java Persistence Query Language) হল একটি অবজেক্ট-ওরিয়েন্টেড কুয়েরি ভাষা যা JPA (Java Persistence API) এর সাথে ব্যবহৃত হয়। এটি SQL এর মতো দেখতে হলেও, JPQL ডেটাবেস টেবিলের পরিবর্তে Java অবজেক্টগুলোকে লক্ষ্য করে। JPQL ব্যবহার করে জটিল কুয়েরি যেমন Joins এবং Aggregate Functions তৈরি করা সম্ভব, যা ডেটাবেসের ডেটা আর্জন ও বিশ্লেষণ করতে সাহায্য করে।

এই লেখায় আমরা JPQL এর মাধ্যমে Joins এবং Aggregate Functions ব্যবহারের পদ্ধতি আলোচনা করব।

1. JPQL এর মাধ্যমে Joins ব্যবহার


Join অপারেশন ডেটাবেসের দুটি বা তার বেশি টেবিলের মধ্যে সম্পর্ক স্থাপন করে। JPQL এ JOIN অপারেশনটি একাধিক সম্পর্কিত অবজেক্টের মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। JPA এর সাথে Join ব্যবহারের ক্ষেত্রে, আপনি JOIN, LEFT JOIN, INNER JOIN ইত্যাদি অপশন ব্যবহার করতে পারেন।

JOIN উদাহরণ

ধরা যাক, আপনার দুটি এন্টিটি রয়েছে, Author এবং Book। এখানে Author অবজেক্টটি অনেক Book অবজেক্টে সম্পর্কিত।

Author Entity:

import javax.persistence.*;
import java.util.List;

@Entity
public class Author {
    @Id
    private Long id;
    private String name;

    @OneToMany(mappedBy = "author")
    private List<Book> books;

    // Getters and Setters
}

Book Entity:

import javax.persistence.*;

@Entity
public class Book {
    @Id
    private Long id;
    private String title;

    @ManyToOne
    @JoinColumn(name = "author_id")
    private Author author;

    // Getters and Setters
}

এখন, আমরা JPQL ব্যবহার করে Author এবং Book এর মধ্যে Join করতে পারি। উদাহরণস্বরূপ, সব Book এবং তাদের Author কে ফেচ করতে:

JPQL Query with JOIN

String jpql = "SELECT b FROM Book b JOIN b.author a WHERE a.name = :authorName";
TypedQuery<Book> query = entityManager.createQuery(jpql, Book.class);
query.setParameter("authorName", "John Doe");
List<Book> books = query.getResultList();

এখানে, আমরা Book অবজেক্টের author প্রপার্টি ব্যবহার করে Author অবজেক্টের সাথে JOIN করেছি।

LEFT JOIN উদাহরণ

যদি আপনি সব Book দেখতে চান, এবং তাদের সাথে সম্পর্কিত Author না থাকলেও, তখন LEFT JOIN ব্যবহার করবেন:

String jpql = "SELECT b FROM Book b LEFT JOIN b.author a";
TypedQuery<Book> query = entityManager.createQuery(jpql, Book.class);
List<Book> books = query.getResultList();

এখানে, LEFT JOIN ব্যবহারের মাধ্যমে, এমন Book গুলি ফেচ করা হবে যেগুলির সাথে Author সম্পর্কিত নয়।


2. JPQL এর মাধ্যমে Aggregate Functions ব্যবহার


Aggregate Functions ডেটাবেসের ডেটা গ্রুপ এবং সংক্ষেপ করার জন্য ব্যবহৃত হয়। JPQL এ aggregate functions যেমন COUNT, SUM, AVG, MAX, MIN ইত্যাদি ব্যবহার করা যায়।

COUNT() Example

ধরা যাক, আমরা Author এর প্রতি কতটি Book আছে তা জানতে চাই:

String jpql = "SELECT a.name, COUNT(b) FROM Author a LEFT JOIN a.books b GROUP BY a.name";
TypedQuery<Object[]> query = entityManager.createQuery(jpql, Object[].class);
List<Object[]> results = query.getResultList();
for (Object[] result : results) {
    System.out.println("Author: " + result[0] + ", Number of Books: " + result[1]);
}

এখানে, COUNT(b) ব্যবহার করা হয়েছে যা প্রতিটি Author এর সাথে সম্পর্কিত Book গুলির সংখ্যা গণনা করে।

SUM() Example

ধরা যাক, আপনার Book এ একটি price ফিল্ড আছে, এবং আপনি জানতে চান একটি Author এর সমস্ত Book এর মোট মূল্য:

String jpql = "SELECT a.name, SUM(b.price) FROM Author a JOIN a.books b GROUP BY a.name";
TypedQuery<Object[]> query = entityManager.createQuery(jpql, Object[].class);
List<Object[]> results = query.getResultList();
for (Object[] result : results) {
    System.out.println("Author: " + result[0] + ", Total Price: " + result[1]);
}

এখানে, SUM(b.price) ব্যবহার করে আমরা প্রতিটি Author এর সাথে সম্পর্কিত Book এর মূল্য যোগফল হিসেব করেছি।

AVG() Example

যদি আপনি কোনো Book এর গড় মূল্য বের করতে চান:

String jpql = "SELECT AVG(b.price) FROM Book b";
TypedQuery<Double> query = entityManager.createQuery(jpql, Double.class);
Double averagePrice = query.getSingleResult();
System.out.println("Average Price: " + averagePrice);

এখানে, AVG(b.price) ব্যবহার করা হয়েছে যা সব Book এর গড় মূল্য প্রদান করবে।

MAX() এবং MIN() Example

যদি আপনি Book এর সর্বোচ্চ বা সর্বনিম্ন মূল্য জানতে চান:

String jpqlMax = "SELECT MAX(b.price) FROM Book b";
TypedQuery<Double> queryMax = entityManager.createQuery(jpqlMax, Double.class);
Double maxPrice = queryMax.getSingleResult();
System.out.println("Max Price: " + maxPrice);

String jpqlMin = "SELECT MIN(b.price) FROM Book b";
TypedQuery<Double> queryMin = entityManager.createQuery(jpqlMin, Double.class);
Double minPrice = queryMin.getSingleResult();
System.out.println("Min Price: " + minPrice);

এখানে, MAX(b.price) এবং MIN(b.price) ব্যবহার করে যথাক্রমে সর্বোচ্চ এবং সর্বনিম্ন মূল্য বের করা হয়েছে।


JPQL এর মাধ্যমে Joins এবং Aggregate Functions এর সুবিধা


  1. ডেটা সম্পর্কের মধ্যে সংযোগ স্থাপন: JOIN ব্যবহার করে সম্পর্কিত অবজেক্টগুলোকে একত্রিত করা সহজ হয়, যা ডেটাবেসের মধ্যে সম্পর্কিত টেবিলগুলির মধ্যে সংযোগ তৈরি করে।
  2. জটিল কুয়েরি সমাধান: Aggregate Functions ব্যবহার করে ডেটাবেসের মধ্যে জটিল গাণিতিক অপারেশন করা যায়, যেমন গড়, সর্বোচ্চ/সর্বনিম্ন মান, যোগফল ইত্যাদি।
  3. অপ্টিমাইজড কোড: JPQL এর মাধ্যমে সিম্পল এবং অবজেক্ট-ওরিয়েন্টেড কুয়েরি লেখা সম্ভব হয়, যা SQL কোডের তুলনায় আরও রিডেবল এবং স্কেলেবল।
  4. ডেটাবেসের উপর নির্ভরশীলতা কমানো: JPQL ব্যবহার করে SQL কোডের চেয়ে Java অবজেক্টের সাথে কাজ করা সহজ হয়, এবং এটি ডেটাবেস নিরপেক্ষভাবে কাজ করতে সাহায্য করে।

সারাংশ


JPQL (Java Persistence Query Language) জাভা ডেভেলপারদের জন্য শক্তিশালী একটি কুয়েরি ভাষা যা ডেটাবেসের ডেটা অবজেক্ট হিসেবে এক্সেস করার সুবিধা দেয়। Joins এবং Aggregate Functions JPQL এ ব্যবহারের মাধ্যমে ডেটাবেস থেকে সম্পর্কিত ডেটা একত্রিত করা এবং ডেটার উপর গাণিতিক অপারেশন করা সহজ হয়ে যায়। JOIN এবং Aggregate Functions এর সাহায্যে ডেটার বিশ্লেষণ এবং রিট্রিভাল আরো কার্যকরী ও স্কেলেবল হয়।

Content added By
Promotion

Are you sure to start over?

Loading...