Я сейчас работаю с фреймворком интеграции MyBatis-Spring, и это то, что я прочитал из документации:
Вместо того, чтобы кодировать объекты доступа к данным (DAO) вручную с использованием SqlSessionDaoSupport или SqlSessionTemplate, Mybatis-Spring предоставляет фабрику прокси: MapperFactoryBean. Этот класс позволяет вам вводить интерфейсы отображения данных прямо в ваши служебные бины.При использовании картографов вы просто называете их так, как вы всегда называли свои DAO, но вам не нужно кодировать какую-либо реализацию DAO, потому что MyBatis-Spring создаст прокси для ты.
Это очень хорошая функция ... но как насчет обработки исключений? Куда переводить ошибки SQL? В моем сервисном слое? Но разве это не нарушит шаблоны Service-DAO?
Пример:
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);
}
Можно ли переводить исключения на уровне службы?
Как это должно быть сделано?
Заранее благодарим за совет.