Tôi hiện đang làm việc với khuôn khổ hội nhập MyBatis-xuân và đó là những gì tôi đọc từ tài liệu:Trình ánh xạ MyBatis được tiêm trực tiếp vào lớp dịch vụ. Còn ngoại lệ thì sao?
Thay vì đối tượng truy cập dữ liệu mã (DAO) bằng tay sử dụng SqlSessionDaoSupport hoặc SqlSessionTemplate, Mybatis-Spring cung cấp một nhà máy Proxy : MapperFactoryBean. Lớp này cho phép bạn chèn các giao diện trình ánh xạ dữ liệu trực tiếp vào các bean dịch vụ của bạn. Khi sử dụng người lập bản đồ, bạn chỉ cần gọi cho họ là bạn đã luôn gọi số DAO của mình, nhưng bạn sẽ không cần mã bất kỳ triển khai DAO nào vì MyBatis-Spring sẽ tạo proxy cho bạn.
Đó là một tính năng rất hay ... nhưng về xử lý ngoại lệ thì sao? Tôi nên dịch các lỗi SQL ở đâu? Trong lớp dịch vụ của tôi? Nhưng nó sẽ không vi phạm các mẫu dịch vụ-DAO?
Ví dụ:
public final class AccountServiceImpl implements AccountService {
(...)
private AccountMapper accountMapper;
(...)
@Override
public void addAccount(Account account) throws AccountServiceException {
//Validating, processing, setting timestamps etc.
(...)
//Persistence:
int rowsAffected;
try {
rowsAffected = accountMapper.insertAccount(account);
} catch (Exception e) {
String msg = e.getMessage();
if (msg.contains("accounts_pkey"))
throw new AccountServiceException("Username already exists!");
if (msg.contains("accounts_email_key"))
throw new AccountServiceException("E-mail already exists!");
throw new AccountServiceException(APP_ERROR);
}
LOG.debug("Rows affected: '{}'", rowsAffected);
if (rowsAffected != 1)
throw new AccountServiceException(APP_ERROR);
}
Is it OK để dịch ngoại lệ trong lớp dịch vụ?
Làm cách nào để thực hiện?
Cảm ơn trước lời khuyên của bạn.
Câu trả lời rất hay! Cảm ơn! –