mybatis+spring如何在事务回滚时向上层返回结果

我是这样写的,但是try catch看着很不美观,而且手动回滚使得控制事务的代码侵入了业务层。

@Service
public class DepartmentServiceImpl {

    @Autowired
    private DepartmentMapper DepartmentMapper;

    @Transactional
    public ServiceResult addDepartment(Department department) {
        try {
            DepartmentMapper.insert(department);
            return new ServiceResult(0, "添加成功");
        } catch (Exception e) {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return new ServiceResult(-1, "添加失败");
        }
    }

    @Transactional
    public ServiceResult deleteDepartmentById(String id) {
        try {
            DepartmentMapper.deleteByPrimaryKey(id);
            return new ServiceResult(0, "删除成功");
        } catch (Exception e) {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return new ServiceResult(-1, "删除失败");
        }
    }

} 

如果用第二种写法,虽然很简洁但是不能向上层返回信息

 @Transactional
    public void addDepartment(Department department) {      
        DepartmentMapper.insert(department);        
    }

请问有什么好的办法

其实你可以把department返回回去,一般来说插入数据库成功后,你的department是会有id的,
如果没成功就不会有id,那么你通过这个来判断就行了。

有一个非常简单适用的办法:在第二种写法中方法签名上面加上throws Exception 并交由上层捕获异常完成后续处理