MyBatis mapper вводится непосредственно в класс обслуживания. А как насчет исключений?

Я сейчас работаю с фреймворком интеграции 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);
    }

Можно ли переводить исключения на уровне службы?

Как это должно быть сделано?

Заранее благодарим за совет.

6
задан Maciej Ziarko 4 January 2012 в 14:29
поделиться