mybatisplus事物示例代码

废话不说,代码如下:

Sevice层:

package com.order.springboottesttransaction.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.order.springboottesttransaction.dto.OrderAddDto;
import com.order.springboottesttransaction.entity.OrderDetail;
import com.order.springboottesttransaction.entity.OrderMaster;
import com.order.springboottesttransaction.entity.ProductInfo;
import com.order.springboottesttransaction.enums.AppCode;
import com.order.springboottesttransaction.enums.OrderStatusEnums;
import com.order.springboottesttransaction.enums.ProductStatusEnums;
import com.order.springboottesttransaction.exception.APIException;
import com.order.springboottesttransaction.mapper.ProductInfoMapper;
import com.order.springboottesttransaction.service.OrderDetailService;
import com.order.springboottesttransaction.service.OrderMasterService;
import com.order.springboottesttransaction.mapper.OrderMasterMapper;
import com.order.springboottesttransaction.utils.BeanConvertUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * https://blog.csdn.net/u013919153/article/details/116045229
* @author Administrator
* @description 针对表【order_master】的数据库操作Service实现
* @createDate 2022-09-25 18:06:32
*/
@Transactional(rollbackFor = {RuntimeException.class, Exception.class})
@Service
public class OrderMasterServiceImpl extends ServiceImpl<OrderMasterMapper, OrderMaster>
    implements OrderMasterService{

    @Autowired
    OrderMasterMapper orderMasterMapper;

    @Autowired
    ProductInfoMapper productInfoMapper;

    @Autowired
    OrderDetailService orderDetailService;

    @Override
    public Integer createOrder(OrderAddDto orderAddDto) {

        Integer  orderid=0;
        try {
            // 订单总金额
            BigDecimal amount = BigDecimal.ZERO;
            // 订单详情PO
            List<OrderDetail> orderDetails = new ArrayList<OrderDetail>();

            // 从ids中查找所有商品信息
            for (OrderDetail orderDetail : orderAddDto.getOrderDetails()) {
                ProductInfo productInfo = productInfoMapper.selectById(orderDetail.getProductId());
                if (null == productInfo || ProductStatusEnums.DOWN.getCode() == productInfo.getProductStatus()) {
                    throw new APIException(AppCode.PRODUCT_NOT_EXIST, "上架商品中无法查询到:" + orderDetail.getProductId());
                }
                // 计算订单总金额
                amount = amount.add(productInfo.getProductPrice()
                        .multiply(new BigDecimal(orderDetail.getProductNumber())));

                // 设置订单详情Po
                BeanUtils.copyProperties(productInfo, orderDetail);
                orderDetails.add(orderDetail);
            }

            // 设置主订单,状态是未支付
            OrderMaster orderMaster = BeanConvertUtils.convertTo(orderAddDto, OrderMaster::new);
            orderMaster.setOrderAmount(amount);
            orderMaster.setStatus(OrderStatusEnums.NO_PAY.getCode());
            orderMaster.setCreateUser("admin");
            orderMaster.setUpdateUser("admin");
            save(orderMaster);
            Integer a=0;
            Integer b=0;
            Integer c=0;
            c=a/b;//制造一个异常,测试mybatisplus 的回滚

            // 设置detail的order主键
            orderDetails.stream().forEach(p -> p.setOrderId(orderMaster.getOrderId()));
            orderDetailService.saveBatch(orderDetails);
            orderid= orderMaster.getOrderId();

        } catch (Exception e) {
            e.printStackTrace();
            //设置手动回滚
            //这里注释掉了,则不会回滚数据了
            TransactionAspectSupport.currentTransactionStatus()
                    .setRollbackOnly();

        }
        finally {

            return orderid;
        }


    }
}




配置类:

package com.order.springboottesttransaction.config;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**

* mybatisplus配置类
        */
//扫描mapper文件夹
@MapperScan("com.order.springboottesttransaction.mapper")
@EnableTransactionManagement//事务
@Configuration//配置类
public class MybatisPlusConfig {

    // 1.乐观锁
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor(){
        return new OptimisticLockerInterceptor();
    }
    // 分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

}

完整代码如下:

spring-boot-practise: springboot练习代码 - Gitee.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值