Spring ORM এর মাধ্যমে Native SQL Query ব্যবহার করে সরাসরি ডেটাবেজের সাথে কাজ করা যায়। Hibernate এবং JPA উভয়ই Native SQL Query সাপোর্ট করে। যখন জটিল বা নির্দিষ্ট ডেটাবেজ অপারেশন প্রয়োজন হয়, তখন Native SQL Query ব্যবহার কার্যকর হতে পারে।
Spring ORM Hibernate ইন্টিগ্রেশন ব্যবহার করলে Hibernate এর createSQLQuery() এবং JPA এর @Query বা EntityManager.createNativeQuery() মেথডের মাধ্যমে Native SQL Query পরিচালনা করা যায়।
Native SQL Query ব্যবহারের কারণ
- ডেটাবেজ-নির্ভর অপ্টিমাইজড কোয়েরি প্রয়োজন হলে।
- জটিল বা কাস্টম কোয়েরি, যা ORM ফিচারে সহজে করা সম্ভব নয়।
- পূর্বে বিদ্যমান SQL কোয়েরি পুনরায় ব্যবহার করতে হলে।
Hibernate এর মাধ্যমে Native SQL Query
উদাহরণ:
@Transactional
public List<Object[]> getEmployeesByDepartment(String department) {
String sql = "SELECT e.id, e.name, e.salary FROM employee e WHERE e.department = :department";
Query query = sessionFactory.getCurrentSession().createSQLQuery(sql);
query.setParameter("department", department);
return query.list();
}
বর্ণনা:
createSQLQuery()ব্যবহার করে Native SQL Query তৈরি করা হয়।setParameter()দিয়ে প্যারামিটার সেট করা হয়।list()মেথড ব্যবহার করে রেজাল্ট রিটার্ন করা হয়।
JPA এর মাধ্যমে Native SQL Query
উদাহরণ:
@Repository
public class EmployeeRepository {
@PersistenceContext
private EntityManager entityManager;
public List<Object[]> getEmployeesByDepartment(String department) {
String sql = "SELECT e.id, e.name, e.salary FROM employee e WHERE e.department = :department";
Query query = entityManager.createNativeQuery(sql);
query.setParameter("department", department);
return query.getResultList();
}
}
বর্ণনা:
createNativeQuery()মেথড ব্যবহার করা হয়।setParameter()দিয়ে SQL প্যারামিটার সেট করা হয়।getResultList()মেথড রেজাল্ট লিস্ট আকারে প্রদান করে।
@Query ব্যবহার করে Native SQL Query
JPA এর ক্ষেত্রে @Query অ্যানোটেশন ব্যবহার করে Native SQL Query লেখা যায়।
উদাহরণ:
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {
@Query(value = "SELECT * FROM employee e WHERE e.department = :department", nativeQuery = true)
List<Employee> findByDepartment(@Param("department") String department);
}
বর্ণনা:
@Queryএর মাধ্যমে SQL কোয়েরি সরাসরি লেখা হয়।nativeQuery = trueনির্দেশ করে এটি একটি Native Query।@Paramব্যবহার করে প্যারামিটার পাস করা হয়।
উদাহরণ: Native SQL Query প্রয়োগ
সার্ভিস ক্লাস উদাহরণ:
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
public List<Employee> getEmployeesByDepartment(String department) {
return employeeRepository.findByDepartment(department);
}
}
কন্ট্রোলার ক্লাস উদাহরণ:
@RestController
@RequestMapping("/employees")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@GetMapping("/department/{department}")
public List<Employee> getEmployeesByDepartment(@PathVariable String department) {
return employeeService.getEmployeesByDepartment(department);
}
}
Spring ORM ব্যবহার করে Native SQL Query ডেটাবেজ অপারেশনে নমনীয়তা প্রদান করে। এর মাধ্যমে জটিল কোয়েরি সহজে বাস্তবায়ন করা যায় এবং Spring এর ট্রানজেকশন ব্যবস্থাপনার সুবিধাও উপভোগ করা যায়।