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
    评论
Spring MVC是一种基于Java的Web开发框架,而MyBatis Plus是一个基于MyBatis的增强工具库。结合使用Spring MVC和MyBatis Plus可以快速开发高效的Web应用程序。 下面是一个简单的Spring MVC和MyBatis Plus的示例代码: 1. 创建Maven项目并添加依赖: ```xml <dependencies> <!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.10</version> </dependency> <!-- MyBatis Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version> </dependency> <!-- 数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> </dependencies> ``` 2. 创建数据库表和实体类: ```sql CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL, password VARCHAR(50) NOT NULL ); ``` ```java public class User { private Integer id; private String username; private String password; // 省略getter和setter方法 } ``` 3. 创建Mapper接口和XML文件: ```java @Mapper public interface UserMapper extends BaseMapper<User> { } ``` ```xml <!-- resources/mapper/UserMapper.xml --> <mapper namespace="com.example.mapper.UserMapper"> <resultMap id="BaseResultMap" type="com.example.entity.User"> <id column="id" property="id" /> <result column="username" property="username" /> <result column="password" property="password" /> </resultMap> <select id="selectById" resultMap="BaseResultMap"> SELECT * FROM user WHERE id = #{id} </select> <insert id="insert" parameterType="com.example.entity.User"> INSERT INTO user (username, password) VALUES (#{username}, #{password}) </insert> </mapper> ``` 4. 创建Service和Controller: ```java @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { } @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping("/{id}") public User getUserById(@PathVariable Integer id) { return userService.getById(id); } @PostMapping("/") public boolean addUser(@RequestBody User user) { return userService.save(user); } } ``` 5. 配置Spring MVC和MyBatis Plus: ```java @Configuration @EnableWebMvc @MapperScan("com.example.mapper") public class AppConfig { // 配置数据源和事务管理器 @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); return sessionFactory.getObject(); } @Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } } ``` 以上示例代码演示了如何使用Spring MVC和MyBatis Plus进行简单的增删改查操作。你可以根据自己的需求进行扩展和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值