spring boot入门(四) springboot事务管理。最完整、简单易懂、详细的spring boot教程。

本文紧接spring boot入门(三)。

事务管理是对于一系列数据库操作进行管理,一个事务包含一个或多个SQL语句,是逻辑管理的工作单元(原子单元)。通俗的讲,事务管理是指的“一次操作”要不就全做,要不就全不做。例如,在一个订单系统中,包括生成订单,扣除商品存库等操作,如果中间某个操作出问题,但其它操作执行成功了,这就出现了数据不同步的问题,为了解决此类问题,事务管理便油然而生。

1.假设我们在一个操作中,需要向数据库插入两条数据:在dao包下建立TestDao的Mapper接口,代码如下:

@Mapper
public interface TestDao {

    @Insert("insert into log values(#{description})")
    public int insertLog(Log log);

    @Insert("insert into test values(#{id},#{test},#{age})")
    public int insetTest(Test test);
}

2.在service包下建立TestService接口和TestServiceImpl实现类,TestService代码如下:

public interface TestService {
    public int insetTest();
}

TestServiceImpl的代码如下:

@Service
@MapperScan("com.yxc.dao")
public class TestServiceImpl implements TestService {


    @Autowired
    private TestDao testDao;


    @Override
    @Transactional
    public int insetTest() {

        Test t1 = new Test();
        t1.setId("3");
        t1.setTest("测试事务管理");
        t1.setAge(18);
        int a = testDao.insetTest(t1);

        Test t2 = new Test();
        t2.setId("44");
        t2.setTest("测试事务管理");
        t2.setAge(18);
        int b = testDao.insetTest(t2);
        return a+b;
    }

   
}

注意上方,t2.setId我们里面注入的值为“44”,但是在我们的数据库中,允许插入的id值长度为1,因此此处插入会出错误,但是t1实例的id是没有问题的,如果没有事务管理,t1实例会正常插入,在此处,t1实例虽然没有问题,但是此实例仍不会插入,因为此方法是一个事务方法。在你想要进行事务操作的方法上加@Transactional注解便对此方法进行了事务操作。

3.测试,在TestController中写测试方法,代码如下(此处只写此方法代码):

 @RequestMapping("/insert")
    public int insert(){
        return testService.insetTest();
    }

4.测试,t1实例也没有插入,实务操作成功。

注意:@Transactional注解是实务操作的关键注解。

猜你喜欢

转载自blog.csdn.net/m0_38075425/article/details/81089104