मैं वर्तमान में MyBatis स्प्रिंग एकीकरण ढांचे के साथ काम कर रहा हूँ और कहा कि मैं क्या डॉक्स से पढ़ा है:MyBatis मैपर सीधे सेवा कक्षा में इंजेक्शन दिया गया। अपवादों के बारे में क्या?
बजाय कोड डेटा का उपयोग वस्तुओं (DAOs) मैन्युअल SqlSessionDaoSupport या SqlSessionTemplate, का उपयोग कर Mybatis स्प्रिंग एक प्रॉक्सी कारखाने प्रदान करता है : MapperFactoryBean। यह कक्षा आपको डेटा मेपर इंटरफेस सीधे आपकी सेवा बीन्स में इंजेक्ट करने देती है। मैपर्स का उपयोग करते समय आप उन्हें बस कॉल करते हैं क्योंकि आपने हमेशा अपना डीएओ कहा है, लेकिन आपको किसी भी डीएओ कार्यान्वयन को कोड करने की आवश्यकता नहीं होगी क्योंकि MyBatis-Spring के लिए प्रॉक्सी बनाएगा।
यह एक बहुत अच्छी सुविधा है ... लेकिन अपवाद हैंडलिंग के बारे में क्या? मुझे SQL त्रुटियों का अनुवाद कहां करना चाहिए? मेरी सेवा परत में? लेकिन क्या यह सेवा-डीएओ पैटर्न का उल्लंघन नहीं करेगा?
उदाहरण:
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);
}
यह सेवा परत में अपवाद का अनुवाद करने के लिए ठीक है?
यह कैसे किया जाना चाहिए?
आपके लिए सलाह के लिए अग्रिम धन्यवाद।
बहुत अच्छा जवाब! धन्यवाद! –