Mybatis 事務配置

*在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("入庫成功");
    }
相關文章
相關標籤/搜索