@NamedQuery কী?
@NamedQuery একটি জাভা পার্সিস্টেন্স এপিআই (JPA) এর অংশ, যা পূর্ব-সংজ্ঞায়িত (predefined) হাইকিউএল (HQL) বা জেপিকিউএল (JPQL) কোয়েরি তৈরি এবং ব্যবহারের জন্য ব্যবহৃত হয়। এটি সাধারণত Entity ক্লাসের উপরে ডিফাইন করা হয় এবং ডাটাবেজ অপারেশনগুলো আরও কার্যকর করে।
Spring ORM এবং Hibernate-এর মাধ্যমে @NamedQuery ব্যবহার করা হলে, এটি ডাটাবেজ কোয়েরি সহজতর এবং পুনঃব্যবহারযোগ্য করে তোলে।
@NamedQuery এর সিনট্যাক্স
@NamedQuery(
name = "queryName",
query = "HQL/JPQL_statement"
)
@NamedQuery এর ব্যবহার
উদাহরণ
নিচে @NamedQuery এর একটি সাধারণ উদাহরণ দেওয়া হলো যেখানে User নামক একটি Entity ক্লাসে এটি ব্যবহৃত হয়েছে।
Entity ক্লাস
package com.example.model;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
@Entity
@NamedQuery(
name = "User.findByName",
query = "FROM User WHERE name = :name"
)
public class User {
@Id
private int id;
private String name;
private String email;
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
DAO ক্লাসে @NamedQuery এর ব্যবহার
@NamedQuery কে Hibernate এর Session বা JPA এর EntityManager এর মাধ্যমে কল করা যায়।
package com.example.dao;
import com.example.model.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import javax.persistence.Query;
import java.util.List;
@Repository
public class UserDao {
@Autowired
private SessionFactory sessionFactory;
public List<User> findUserByName(String name) {
Session session = sessionFactory.getCurrentSession();
Query query = session.getNamedQuery("User.findByName");
query.setParameter("name", name);
return query.getResultList();
}
}
Service ক্লাসে ব্যবহারের উদাহরণ
package com.example.service;
import com.example.dao.UserDao;
import com.example.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserDao userDao;
public List<User> getUsersByName(String name) {
return userDao.findUserByName(name);
}
}
Main Class
package com.example;
import com.example.config.AppConfig;
import com.example.model.User;
import com.example.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.List;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserService userService = context.getBean(UserService.class);
List<User> users = userService.getUsersByName("John Doe");
users.forEach(user -> {
System.out.println("ID: " + user.getId());
System.out.println("Name: " + user.getName());
System.out.println("Email: " + user.getEmail());
});
}
}
গুরুত্বপূর্ণ বিষয়
- পুনঃব্যবহারযোগ্যতা: @NamedQuery পুনঃব্যবহারযোগ্য এবং কোয়েরি লেখার ঝামেলা কমায়।
- প্যারামিটারাইজড কোয়েরি:
:parameterNameএর মাধ্যমে ডাইনামিক প্যারামিটার সেট করা যায়। - পারফরম্যান্স: প্রি-কম্পাইল্ড কোয়েরি হিসেবে @NamedQuery কোয়েরি এক্সিকিউশন দ্রুততর করে।
@NamedQuery এনোটেশন ব্যবহার করে কোয়েরি অপারেশন আরও কার্যকর এবং পুনঃব্যবহারযোগ্য করা যায়। এটি Spring ORM এবং Hibernate এর সাথে ডাটাবেজ ইন্টিগ্রেশনকে সহজ করে তোলে।