che sto attualmente lavorando con integration framework MyBatis-Spring e questo è quello che ho letto da docs:Il mappatore MyBatis è stato iniettato direttamente nella classe di servizio. Che dire delle eccezioni?
Invece di oggetti di accesso ai dati di codice (DAO) utilizzando manualmente SqlSessionDaoSupport o SqlSessionTemplate, Mybatis-Spring offre invece una fabbrica di delega : MapperFactoryBean. Questa classe consente di iniettare le interfacce di mapping dei dati direttamente nei bean di servizio. Quando usi i mapper, li chiami semplicemente come hai sempre chiamato i tuoi DAO , ma non dovrai codificare alcuna implementazione DAO perché MyBatis-Spring creerà un proxy per tu.
Questa è una funzionalità molto interessante ... ma per quanto riguarda la gestione delle eccezioni? Dove dovrei tradurre gli errori SQL? Nel mio livello di servizio? Ma non violerebbe i modelli DAO del servizio?
Esempio:
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);
}
E 'OK per tradurre eccezioni a livello di servizio?
Come dovrebbe essere fatto?
Grazie in anticipo per il vostro consiglio.
Risposta molto bella! Grazie! –