手把手写代码:三小时急速入门springboot—企业级微博项目实战--->csdn学院
本文紧接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注解是实务操作的关键注解。