iBATIS (MyBatis) একটি SQL ম্যাপিং ফ্রেমওয়ার্ক যা ডেটাবেস অপারেশন পরিচালনা করতে সাহায্য করে। যখন ডেটাবেস অপারেশনের মধ্যে কোনো ত্রুটি ঘটে, তখন আপনি কাস্টম এক্সসেপশন তৈরি করতে পারেন, যা সুনির্দিষ্ট ত্রুটির বার্তা প্রদান করবে এবং প্রয়োজনে সিস্টেমের পরিচালনা সহজ করবে।
এখানে Custom Exception তৈরি এবং exception handling এর কিছু সাধারণ পদ্ধতি এবং উদাহরণ দেওয়া হলো যা আপনি iBATIS (MyBatis) এর সাথে ব্যবহার করতে পারেন।
1. Custom Exception তৈরি করা
MyBatis বা যেকোনো জাভা অ্যাপ্লিকেশনেও আপনি custom exceptions তৈরি করতে পারেন যা ডেটাবেস অপারেশনের সময় সাধারণ বা বিশেষ ত্রুটি সম্পর্কে বিস্তারিত বার্তা প্রদান করবে।
Step 1: Create a Custom Exception Class
public class DatabaseException extends RuntimeException {
// Constructor that accepts a message
public DatabaseException(String message) {
super(message);
}
// Constructor that accepts a message and a cause
public DatabaseException(String message, Throwable cause) {
super(message, cause);
}
}
- Explanation:
- এই কাস্টম এক্সসেপশনটি
RuntimeExceptionথেকে উত্তরাধিকার লাভ করছে এবং দুইটি কনস্ট্রাক্টর সরবরাহ করেছে। একটিতে শুধুমাত্র বার্তা (message) থাকবে, অন্যটিতে বার্তা এবং ত্রুটির কারণ (cause) থাকবে। - এটি ডেটাবেস সম্পর্কিত ত্রুটির জন্য ব্যবহৃত হবে।
- এই কাস্টম এক্সসেপশনটি
2. Custom Exception হ্যান্ডল করা
MyBatis ব্যবহারের সময়, কিছু নির্দিষ্ট ডেটাবেস অপারেশনে যেমন SQLIntegrityConstraintViolationException, SQLException, ইত্যাদির মাধ্যমে ত্রুটি ঘটতে পারে। এই ত্রুটিগুলিকে কাস্টম এক্সসেপশনে রূপান্তরিত করে ব্যবহার করা যেতে পারে।
Step 2: Throw Custom Exception in MyBatis Mapper
MyBatis মাপার ফাইলে যখন কোনো ত্রুটি ঘটবে, তখন আপনি আপনার কাস্টম এক্সসেপশনটি থ্রো করতে পারেন।
import org.apache.ibatis.exceptions.PersistenceException;
public class EmployeeMapperImpl implements EmployeeMapper {
@Override
public void insertEmployee(Employee employee) {
try {
// SQL Query execution logic here (using MyBatis)
session.insert("com.example.mapper.EmployeeMapper.insertEmployee", employee);
} catch (PersistenceException e) {
// If any exception occurs, throw custom exception with a message
throw new DatabaseException("Error occurred while inserting employee", e);
}
}
}
- Explanation:
- এখানে
PersistenceExceptionএর মধ্যে আসা সমস্ত ত্রুটির জন্য আমরা কাস্টমDatabaseExceptionথ্রো করেছি। - এইভাবে, MyBatis এর মধ্যে আসা সকল এক্সসেপশনকে আমরা কাস্টম এক্সসেপশনে কনভার্ট করতে পারি।
- এখানে
3. Exception Handling in Mapper Interface
আপনি যদি কাস্টম এক্সসেপশন হ্যান্ডলিং ম্যাপারের ইন্টারফেসে করতে চান, তাহলে try-catch ব্লক ব্যবহার করতে পারেন।
Step 3: Define a Mapper Interface
public interface EmployeeMapper {
void insertEmployee(Employee employee) throws DatabaseException;
}
- Explanation:
- এখানে
insertEmployeeমেথডেDatabaseExceptionথ্রো করা হয়েছে। এর মাধ্যমে, আপনি এই এক্সসেপশনকে ওয়েব কন্ট্রোলার বা অন্য কোথাও ক্যাচ করতে পারবেন।
- এখানে
4. Handling Exceptions in Service Layer
MyBatis মেপারের মাধ্যমে ডেটাবেস অপারেশন পরিচালনা করার পর, আপনি আপনার Service Layer-এ কাস্টম এক্সসেপশন হ্যান্ডল করতে পারেন।
Step 4: Handle Custom Exception in Service Layer
@Service
public class EmployeeService {
@Autowired
private EmployeeMapper employeeMapper;
public void addEmployee(Employee employee) {
try {
employeeMapper.insertEmployee(employee);
} catch (DatabaseException e) {
// Handle custom exception
System.out.println("Custom Exception Caught: " + e.getMessage());
// Optionally, rethrow the exception or perform other actions
}
}
}
- Explanation:
- এখানে,
DatabaseExceptionথ্রো হলে, Service Layer এর মধ্যে সেই এক্সসেপশন ক্যাচ করা হচ্ছে। এখানে আপনি ত্রুটির বার্তা লোগিং বা পুনরায় থ্রো করা সহ অন্যান্য ক্রিয়া করতে পারেন।
- এখানে,
5. Global Exception Handling with Spring (@ControllerAdvice)
Spring Framework ব্যবহার করে আপনি গ্লোবাল এক্সসেপশন হ্যান্ডলিং করতে পারেন যেখানে সমস্ত কাস্টম এক্সসেপশনগুলো এক জায়গায় হ্যান্ডল করা হবে।
Step 5: Global Exception Handler with @ControllerAdvice
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ControllerAdvice;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(DatabaseException.class)
public ResponseEntity<String> handleDatabaseException(DatabaseException e) {
return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleGeneralException(Exception e) {
return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
- Explanation:
@ControllerAdviceঅ্যানোটেশনটি Spring Framework-এ গ্লোবাল এক্সসেপশন হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়। এতেhandleDatabaseExceptionমেথডে কাস্টম এক্সসেপশনDatabaseExceptionহ্যান্ডল করা হচ্ছে।
6. Example of Using Custom Exception in Spring Boot Application
@RestController
@RequestMapping("/employee")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@PostMapping("/add")
public ResponseEntity<String> addEmployee(@RequestBody Employee employee) {
try {
employeeService.addEmployee(employee);
return new ResponseEntity<>("Employee added successfully", HttpStatus.CREATED);
} catch (DatabaseException e) {
return new ResponseEntity<>("Error: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
Explanation:
- এখানে
addEmployeeAPI এর মধ্যে কাস্টমDatabaseExceptionহ্যান্ডলিং করা হচ্ছে, যাতে আপনি HTTP 500 এর মাধ্যমে ত্রুটির বার্তা ব্যবহারকারীকে ফিরিয়ে দিতে পারেন।
iBATIS (MyBatis) তে কাস্টম এক্সসেপশন তৈরি এবং হ্যান্ডল করা খুবই সহজ এবং কার্যকর। আপনি Programmatic Exception Handling বা Declarative Exception Handling ব্যবহারের মাধ্যমে আপনার ডেটাবেস অপারেশনের ত্রুটিগুলি সঠিকভাবে পরিচালনা করতে পারেন।
- Custom Exception: আপনি নিজের ত্রুটির ধরনের জন্য কাস্টম এক্সসেপশন তৈরি করতে পারেন যা ডেটাবেস অপারেশন বা অন্যান্য লজিকের সময় সুনির্দিষ্ট ত্রুটি বার্তা প্রদান করবে।
- Exception Handling: কাস্টম এক্সসেপশন থ্রো করার পর আপনি
try-catchব্লক বা গ্লোবাল এক্সসেপশন হ্যান্ডলার ব্যবহার করে এগুলি হ্যান্ডল করতে পারেন। - Spring Integration: Spring Framework ব্যবহার করে আপনি গ্লোবাল এক্সসেপশন হ্যান্ডলিং করতে পারেন এবং এটি কার্যকরীভাবে অ্যাপ্লিকেশনকে আরও স্থিতিশীল করে তোলে।
এটি একটি প্রাথমিক গাইড যা iBATIS (MyBatis) তে কাস্টম এক্সসেপশন তৈরি এবং হ্যান্ডল করার জন্য ব্যবহৃত হতে পারে।
Read more