*在spring-mapper.xml中配置
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--下面配置事务切面-->
<tx:annotation-driven transaction-manager="transactionManager"/>
*使用时在方法上加上 @Transactional 注解(一般用在service层)
作用:一条sql语句出现问题下面所有的sql 不在执行,并且已经执行过的语句会回滚到执行这个方法之前的状态
例:
@Transactional
@Override
public ErpResult updateDoInStore(Emp emp, Long id, Long storeuuid) {
OrderDetail orderDetail = orderDetailMapper.findByGoodsUuid(id);
if (OrderDetail.STATE_IN.equals(orderDetail.getState())) {
return ResultUtils.error("商品已经入库,不能重复入库");
}
StoreDetail storeDetail = storeDetailMapper.findByGoodsId(storeuuid, orderDetail.getGoodsuuid());
if (storeDetail != null) {
Long orderNum = orderDetail.getNum();
Long storeDetailNum = storeDetail.getNum();
storeDetail.setNum(orderNum + storeDetailNum);
storeDetailMapper.updateStoreDetail(storeDetail);
} else {
storeDetailMapper.insert(orderDetail.getNum(), orderDetail.getGoodsuuid(), storeuuid);
}
Storeoper storeoper = new Storeoper();
storeoper.setEmpuuid(emp.getUuid());
storeoper.setOpertime(new Date());
storeoper.setStoreuuid(storeuuid);
storeoper.setGoodsuuid(orderDetail.getGoodsuuid());
storeoper.setNum(orderDetail.getNum());
storeoper.setType(Storeoper.TYPE_IN);
storeoperMapper.insert(storeoper);
orderDetail.setEnder(emp.getUuid());
orderDetail.setStoreuuid(storeuuid);
orderDetail.setState(OrderDetail.STATE_IN);
orderDetail.setEndtime(new Date());
orderDetailMapper.update(orderDetail);
boolean b = orderDetailMapper.selectOrderDetailcount(orderDetail.getOrdersuuid());
if (b) {
Orders orders = ordersMapper.findById(orderDetail.getOrdersuuid());
orders.setEnder(emp.getUuid());
orders.setEndtime(new Date());
orders.setState(Orders.STATE_END);
ordersMapper.updateOrder(orders);
}
return ResultUtils.ok("入库成功");
}