我的个人理解,在三层架构的开发模式中。
dao层
负责对数据库进行增删查改基本操作。比如新建一个用户信息,更新一个用户信息。
每个dao层的方法都必须是单元操作,即不允许多次读写数据库,因此无需在dao层加事务处理。
在dao层无需手动去处理异常,异常由系统自动抛出,在service层捕获。
service层
负责组合dao层方法来处理业务逻辑。比如处理用户A转账给用户B,就需要两次调用dao层方法,一次是减少用户A的账户、一个是增加用户B的账户,这种业务逻辑就必须放在service层。
service层负责捕获dao层的异常,并判断是否向上抛出异常,是否回滚事务,或者还是在service层就处理掉异常,给上层返回处理结果。
通常,对于简单的业务逻辑,可以在service捕获并处理异常,然后给上层action层返回处理结果(成功or失败)即可。如果涉及到的业务复杂,并且涉及到多次的dao层写入操作,就必须回滚事务。注意,使用spring的aop事务的话,要么是在service层抛出异常触发aop事务回滚,要么就得手动回滚事务。如果异常在service层被捕获并处理掉,是不会触发事务回滚的。
action层
复杂调用service层方法,并捕获service层的异常,给用户输出可读的信息。
无需事务处理。