问题描述
在service层中我们把工作交给dao层,比如:
1.adminMapper.insert(admin);
2.List< Admin> list = adminMapper.selectByExample(adminExample);
这时问题来了:当我们把任务交给adminMapper时,因为AdminMapper的实现类我们没有写交给了框架,所以其中的操作我们无法干预,如果抛异常了我们无法直接定义异常类,并利用springMVC进行异常映射然后统一处理。以下分两种情况讨论。
分情况讨论
情况一:查询操作
List< Admin> list = adminMapper.selectByExample(adminExample);
我们调用查询操作,这时会出现异常比如没有查到对应数据,查到了进行比较发现不对等异常,这种异常特点在于MyBatis进行操作时并不会有异常,而是仅仅体现在返回值list的情况,故这样的情况我们只需要根据查询到的结果自定义异常类,并配置异常映射机制即可。
@Override
public Admin getAdminByLoginAcct(String loginAcct, String userPswd) {
// 1.根据登录账号查询Admin对象
// ①创建AdminExample对象
AdminExample adminExample = new AdminExample();
// ②创建Criteria对象
Criteria criteria = adminExample.createCriteria();
// ③在Criteria对象中封装查询条件
criteria.andLoginAcctEqualTo(loginAcct);
// ④调用AdminMapper的方法执行查询
List<Admin> list = adminMapper.selectByExample(adminExample);
/*根据list的不同情况对应不同自定义异常*/
// 2.判断Admin对象是否为null
if(list == null || list.size() == 0) {
throw new LoginFailedException(CrowdConstant.MESSAGE_LOGIN_FAILED);
}
if(list.size() > 1) {
throw new RuntimeException(CrowdConstant.MESSAGE_SYSTEM_ERROR_LOGIN_NOT_UNIQUE);
}
Admin admin = list.get(0);
// 3.如果Admin对象为null则抛出异常
if(admin == null) {
throw new LoginFailedException(CrowdConstant.MESSAGE_LOGIN_FAILED);
}
/*根据list的不同情况对应不同自定义异常*/
// 4.如果Admin对象不为null则将数据库密码从Admin对象中取出
String userPswdDB = admin.getUserPswd();
// 5.将表单提交的明文密码进行加密
String userPswdForm = CrowdUtil