使用MyBatis时的异常处理

使用MyBatis时的异常处理

使用mybatis时在Spring的配置文件中给sqlSessionFactory指定好dataSource,typeAliasesPackage,mapperLocations后,接下来写mappers xml及interface文件就好了,在数据层调用的时候很简单的两句:

1
2
SpitterMapper spitterMapper = sqlSessionTemplate.getMapper(SpitterMapper.class);
return spitterMapper.findAllSpitters();

但是这并不够,虽然出了什么错,会在终端告诉我们(比如说操作的数据库表并不存在,SQL语法有问题等等),但是在实际Web环境中,我们往往需要更多的控制,不论是否有异常都需要自己明确的处理,而不是直接出错,所以我们把异常逐渐递交给上层。

所以我们在这里需要自己加入异常处理,并且在异常发生的时候有对应的动作(打印日志,或者回复客户端对应的消息)。像下面这样,在Service层声明我们自己的异常,主动捕获异常,然后把异常(内部包含底层具体的异常)传递下去,而且在日志输出中可以看到实际发生了什么。下面的System.out.println在实际中使用logger。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Service(value = "spitterService")
public class SpitterService {

@Autowired
private SqlSessionTemplate sqlSessionTemplate;

public List<Spitter> findAllSpitters() {
try{
SpitterMapper spitterMapper = sqlSessionTemplate.getMapper(SpitterMapper.class);
return spitterMapper.findAllSpitters();
}catch (Exception e){
System.out.println("----------------------------");
System.out.println(e.getCause());
System.out.println("+++++++++++++++++++++++++++++");
}
return null;
}
}

完整代码