package com.example.demoge.controller;
import com.example.demoge.service.TCouponInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/transactionalTest")
@Api(tags = "事务传播级别及非事务方法和事务方法之间的互相调用")
public class TransactionalTestController {
@Autowired
private TCouponInfoService tCouponInfoService;
@ApiOperation("新增/编辑券信息")
@PostMapping("testTransactional")
public Object testTransactional() {
return tCouponInfoService.testTransactional();
}
}
package com.example.demoge.service.impl;
import com.baomidou.mybatisplus.plugins.Page;
import com.example.demoge.entity.TCouponInfo;
import com.example.demoge.mapper.TCouponInfoMapper;
import com.example.demoge.service.TCouponApplyDetailService;
import com.example.demoge.service.TCouponInfoService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class TCouponInfoServiceImpl extends ServiceImpl<TCouponInfoMapper, TCouponInfo> implements TCouponInfoService {
@Autowired
private TCouponInfoMapper tCouponInfoMapper;
@Autowired
private TCouponApplyDetailService tCouponApplyDetailService;
@Override
public TCouponInfo demo(Integer id) {
TCouponInfo tCouponInfo = tCouponInfoMapper.selectById(id);
tCouponInfoMapper.selectList(null);
return tCouponInfo;
}
@Override
public List<TCouponInfo> selectPageList(Page page) {
return tCouponInfoMapper.selectPageList(page);
}
@Override
@Transactional
public Object testTransactional() {
TCouponInfo tCouponInfo = tCouponInfoMapper.selectById(125);
tCouponInfo.setId(null);
tCouponInfo.setCouponCategoryCode(tCouponInfo.getCouponCategoryCode() + "001");
tCouponInfoMapper.insert(tCouponInfo);
tCouponApplyDetailService.inserttest();
tCouponInfoMapper.insert(tCouponInfo);
return null;
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void insert() {
TCouponInfo tCouponInfo = tCouponInfoMapper.selectById(125);
tCouponInfo.setId(null);
tCouponInfo.setCouponCategoryCode(tCouponInfo.getCouponCategoryCode() + "002");
tCouponInfoMapper.insert(tCouponInfo);
throw new RuntimeException("故意跑出异常");
}
}
package com.example.demoge.service.impl;
import com.example.demoge.entity.TCouponApplyDetail;
import com.example.demoge.entity.TCouponInfo;
import com.example.demoge.mapper.TCouponApplyDetailMapper;
import com.example.demoge.mapper.TCouponInfoMapper;
import com.example.demoge.service.TCouponApplyDetailService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Service
public class TCouponApplyDetailServiceImpl extends ServiceImpl<TCouponApplyDetailMapper, TCouponApplyDetail> implements TCouponApplyDetailService {
@Autowired
private TCouponInfoMapper tCouponInfoMapper;
@Transactional(propagation = Propagation.REQUIRES_NEW)
@Override
public void inserttest() {
TCouponInfo tCouponInfo = tCouponInfoMapper.selectById(125);
tCouponInfo.setId(null);
tCouponInfo.setCouponCategoryCode(tCouponInfo.getCouponCategoryCode() + "002");
tCouponInfoMapper.insert(tCouponInfo);
}
}