*在spring-mapper.xml中配置spring
<!--配置事務管理器--> <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 不在執行,而且已經執行過的語句會回滾到執行這個方法以前的狀態
例: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("入庫成功"); }