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