trabajo actualmente con marco de integración MyBatis-Spring y eso es lo que he leído de documentos:MyBatis mapper inyectado directamente en la clase de servicio. ¿Qué hay de las excepciones?
En lugar de objetos de acceso a datos de código (DAO) de forma manual utilizando SqlSessionDaoSupport o SqlSessionTemplate, mybatis-resorte proporciona una fábrica de proxy : MapperFactoryBean. Esta clase le permite inyectar interfaces de mapeador de datos directamente en sus beans de servicio. Cuando utilice mappers, simplemente llámelos como siempre ha llamado a sus DAO , pero no necesitará codificar ninguna implementación DAO porque MyBatis-Spring creará un proxy para usted.
Esa es una característica muy buena ... pero ¿qué pasa con el manejo de excepciones? ¿Dónde debería traducir los errores de SQL? En mi capa de servicio? Pero, ¿no violaría los patrones DAO de servicio?
Ejemplo:
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);
}
¿Está bien para traducir excepciones en la capa de servicio?
¿Cómo se debe hacer?
Gracias de antemano por su asesoramiento.
Muy buena respuesta! ¡Gracias! –