1.创立数据库实体类以及mapper
1.1数据库字段
数据库表字段如下所示:
1.2创立对应实体类
package com.aries.jc.dciTest.modules.entity.local;import com.baomidou.mybatisplus.annotation.TableField;import com.baomidou.mybatisplus.annotation.TableName;import lombok.Data;@Data@TableName("tb_test")public class TbTest { @TableField("region_name") private String regionName; @TableField("region_code") private String regionCode; @TableField("region_config") private Integer regionConfig;}
1.3 创立对应mapper
package com.aries.jc.dciTest.modules.mapper.local;import com.aries.jc.dciTest.modules.entity.local.TbTest;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import org.apache.ibatis.annotations.Mapper;@Mapperpublic interface TbTestMapper extends BaseMapper<TbTest> {}
1.4 创立service层接口:
package com.aries.jc.dciTest.modules.service;import com.aries.jc.dciTest.modules.entity.local.TbTest;import com.hikvision.ga.common.BaseResult;public interface TbTestService { BaseResult insertTbTest1(TbTest tbTest); BaseResult insertTbTest2(TbTest tbTest); BaseResult insertTbTest3(TbTest tbTest);}
1.5 创立service层接口实现类
办法insertTbTest1执行失常的数据库增加操作
办法insertTbTest2执行数据库增加操作后,会通过int l = 2/0;
触发一个异样
办法insertTbTest3执行数据库增加操作后,会通过int l = 2/0;
触发一个异样,但在该办法上增加了注解
@Transactional(rollbackFor = Exception.class)
来执行事务回滚
package com.aries.jc.dciTest.modules.service.impl;import com.aries.jc.dciTest.modules.entity.local.TbTest;import com.aries.jc.dciTest.modules.mapper.local.TbTestMapper;import com.aries.jc.dciTest.modules.service.TbTestService;import com.hikvision.ga.common.BaseResult;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;@Servicepublic class TbTestServiceImpl implements TbTestService { private static final Logger LOGGER = LoggerFactory.getLogger(TbTestServiceImpl.class); @Autowired private TbTestMapper tbTestMapper; /** * 向数据库增加操作,不触发异样 * @param tbTest * @return */ @Override public BaseResult insertTbTest1(TbTest tbTest) { BaseResult baseResult = new BaseResult(); //向数据库增加操作 int i = tbTestMapper.insert(tbTest); if (i != 0 ){ LOGGER.info("增加胜利"); } baseResult.setMsg("增加胜利"); baseResult.setCode("0"); return baseResult; } /** * 向数据库增加操作,增加后触发异样,但不执行事务回滚 * @param tbTest * @return */ @Override public BaseResult insertTbTest2(TbTest tbTest) { BaseResult baseResult = new BaseResult(); //向数据库增加操作 int i = tbTestMapper.insert(tbTest); if (i != 0 ){ LOGGER.info("增加胜利"); } //触发异样 int l = 2/0; baseResult.setMsg("增加胜利"); baseResult.setCode("0"); return baseResult; } /** * 向数据库增加操作,增加后触发异样,执行事务回滚 * @param tbTest * @return */ @Override @Transactional(rollbackFor = Exception.class) public BaseResult insertTbTest3(TbTest tbTest) { BaseResult baseResult = new BaseResult(); //向数据库增加操作 int i = tbTestMapper.insert(tbTest); if (i != 0 ){ LOGGER.info("增加胜利"); } //触发异样 int l = 2/0; baseResult.setMsg("增加胜利"); baseResult.setCode("0"); return baseResult; }}
1.6 创立controller层
package com.aries.jc.dciTest.modules.controller;import com.aries.jc.dciTest.modules.entity.local.PointConfig;import com.aries.jc.dciTest.modules.entity.local.TbTest;import com.aries.jc.dciTest.modules.service.TbTestService;import com.hikvision.ga.common.BaseResult;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController@Api(tags = "测试")@RequestMapping("/test")public class TbTestController { @Autowired private TbTestService tbTestService; @RequestMapping(value = "/insert1", method = RequestMethod.POST) @ApiOperation("测试事务回滚:失常增加,不触发异样") public BaseResult insertTbTest1(@RequestBody TbTest tbTest){ return tbTestService.insertTbTest1(tbTest); } @RequestMapping(value = "/insert2", method = RequestMethod.POST) @ApiOperation("测试事务回滚:失常增加,增加后触发异样,不执行事务回滚") public BaseResult insertTbTest2(@RequestBody TbTest tbTest){ return tbTestService.insertTbTest2(tbTest); } @RequestMapping(value = "/insert3", method = RequestMethod.POST) @ApiOperation("测试事务回滚:失常增加,增加后触发异样,执行事务回滚") public BaseResult insertTbTest3(@RequestBody TbTest tbTest){ return tbTestService.insertTbTest3(tbTest); }}
2.swagger测试:
失常增加,不触发异样:办法insertTbTest1
失常向数据库增加
失常增加,增加后触发异样,不执行事务回滚:办法insertTbTest2
向数据库胜利增加后,触发了异样,但因为没有事务回滚,数据库中就保留了增加的对象
失常增加,增加后触发异样,执行事务回滚:办法insertTbTest3
向数据库胜利增加后,触发了异样,但因为设置了事务回滚,数据库就回滚了该办法调用之前的状态,即在数据库中没有新增加的对象