1. 背景介绍
本文基于快递包裹取件(用户获取包裹并将包裹信息存储数据库)和包裹入库(快递员将包裹放入收发室并将包裹信息存储如数据库)场景,并将包裹入库信息和取件信息分别存入不同的数据库。这样当用户取件时,需要更新两个表信息(入库表中的包裹状态和取件表中插入取件信息)。
2. 问题描述
在采用SSM框架搭建后端服务时,若Service层业务逻辑较复杂,一条业务逻辑中可能会调用多个dao层更改数据库的接口。此时若采用Spring自带的@Transactional注解进行事务处理,将难以满足业务需求。正如代码块1所示:
代码块1
packet com.example.pickup;
public interface PickUpDao{
@Delete("delete from pickup where orderNum=#{orderNum}")
public int removePickUpPacket(String orderNum)
}
packet com.example.storage;
public interface StorageDao{
@Update("update storage set isPickup=false where orderNum=#{orderNum}")
public int updateStatuOfStoragePacket(String orderNum,boolean statu)
}
packet com.example.pickup;
public class PickUpServiceImpl{
@Autowired