Native SQL Query কি এবং এর প্রয়োগ

Spring ORM এবং Native SQL Queries - স্প্রিং ওআরএম (Spring ORM) - Java Technologies

313

Native SQL Query কি?

Native SQL Query হলো ডাটাবেজে সরাসরি SQL স্টেটমেন্ট রান করার একটি পদ্ধতি। Hibernate বা Spring ORM সাধারণত HQL (Hibernate Query Language) বা Criteria API ব্যবহার করে ডাটাবেজের সাথে ইন্টারঅ্যাক্ট করে। তবে, কিছু বিশেষ ক্ষেত্রে যেখানে কাস্টম SQL স্টেটমেন্ট প্রয়োজন হয় (যেমন জটিল যোগ বা নির্দিষ্ট ডাটাবেস ফিচার ব্যবহার), সেখানে Native SQL Query ব্যবহার করা হয়।


Native SQL Query এর প্রয়োগ

Spring ORM এ Native SQL Query ব্যবহার করার জন্য @Query অ্যানোটেশন বা Hibernate এর createNativeQuery মেথড ব্যবহার করা হয়। নিচে এর বিভিন্ন প্রয়োগ দেখানো হলো।


উদাহরণ ১: Hibernate এর মাধ্যমে Native SQL Query

Hibernate এর Session অবজেক্ট ব্যবহার করে Native SQL Query রান করা যায়।

EmployeeDAO.java

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class EmployeeDAO {

    @Autowired
    private SessionFactory sessionFactory;

    public List<Object[]> getEmployeesWithNativeQuery() {
        Session session = sessionFactory.getCurrentSession();
        String sql = "SELECT id, name, department FROM Employee";
        return session.createNativeQuery(sql).getResultList();
    }
}

উদাহরণ ২: Spring Data JPA এর মাধ্যমে Native SQL Query

Spring Data JPA ব্যবহার করে @Query অ্যানোটেশন দিয়ে Native SQL Query রান করা যায়।

EmployeeRepository.java

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {

    @Query(value = "SELECT * FROM Employee WHERE department = :department", nativeQuery = true)
    List<Employee> findByDepartment(String department);
}

Native SQL Query এর ব্যবহার ধাপ

ধাপ ১: Hibernate এর কনফিগারেশন

Hibernate-এর জন্য hibernate.cfg.xml বা Spring এর applicationContext.xml ফাইলে কনফিগারেশন সঠিকভাবে সম্পন্ন করুন।

ধাপ ২: SQL স্টেটমেন্ট লিখুন

SQL স্টেটমেন্ট সরাসরি লিখুন এবং Hibernate বা Spring JPA থেকে রান করুন।

ধাপ ৩: প্রয়োজন অনুযায়ী প্যারামিটার ব্যবহার

Native Query-তে ডাইনামিক ডেটা পাস করার জন্য Named Parameters বা Indexed Parameters ব্যবহার করা যায়।


উদাহরণ ৩: Named Parameters সহ Native SQL Query

EmployeeRepository.java

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {

    @Query(value = "SELECT * FROM Employee WHERE name = :name AND department = :department", nativeQuery = true)
    List<Employee> findByNameAndDepartment(@Param("name") String name, @Param("department") String department);
}

উদাহরণ ৪: Native Query এর মাধ্যমে Custom Projection

Native Query এর মাধ্যমে নির্দিষ্ট কলামগুলোর জন্য Projection ব্যবহার করা যায়।

Custom DTO তৈরি করুন

public class EmployeeDTO {
    private String name;
    private String department;

    public EmployeeDTO(String name, String department) {
        this.name = name;
        this.department = department;
    }

    // Getters and Setters
}

EmployeeRepository.java

import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {

    @Query(value = "SELECT name, department FROM Employee", nativeQuery = true)
    List<Object[]> findAllEmployeeDetails();

    default List<EmployeeDTO> findAllAsDTO() {
        List<Object[]> results = findAllEmployeeDetails();
        return results.stream()
                      .map(row -> new EmployeeDTO((String) row[0], (String) row[1]))
                      .toList();
    }
}

Native SQL Query এর সুবিধা এবং সীমাবদ্ধতা

সুবিধা:

  • জটিল SQL স্টেটমেন্ট ব্যবহার করা যায়।
  • ডাটাবেস স্পেসিফিক অপারেশন সম্পন্ন করা যায়।
  • ORM এর সীমাবদ্ধতা অতিক্রম করে।

সীমাবদ্ধতা:

  • ডাটাবেসের উপর নির্ভরশীল।
  • কোড বেশি স্পষ্ট নয় এবং মেইনটেইন করা কঠিন।
  • পোর্টেবিলিটির অভাব (ডাটাবেস পরিবর্তনে কোড পরিবর্তন করতে হয়)।

Native SQL Query Spring ORM এবং Hibernate ব্যবহারকারীদের জন্য একটি গুরুত্বপূর্ণ টুল, যা ডাটাবেসের বিশেষ ফিচার বা জটিল কোয়েরি পরিচালনায় সহায়ক।

Content added By
Promotion

Are you sure to start over?

Loading...