1.就是为了确保同一条记录在数据中的状态,记录的信息保持一致。
例子:
一个用户,买了一本书,这时需要库存书-1,用户的账户余额 - 书的价格。
在没有添加事务的时候,如果库存够,但是用户余额不足。导致库存 - 1,但是因为余额不足,SQL执行失败,
此时应该回滚到库存 - 1 之前,但是由于没有事务管理。没有返回记录,所以导致数据库中的记录发生错误。
2.spring的声名式事务管理。(依靠注解)
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 启用事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
在需要添加事务的地方,添加注解:@Transactional
@Service("bookServiceImpl")
public class BookServiceImpl implements BookService{
@Autowired
private BookShopDao bookShopDao;
@Transactional
@Override
public void userBuy(String username, String isbn) {
//1 获取书的单价
int price = bookShopDao.findBookPriceByIsbn(isbn);
//2.更新库存
bookShopDao.updateBookStock(isbn);
//3.账户余额
bookShopDao.updateUserAccount(username, price);
}
}
作为对比:在没有使用spring依靠注解来实现事务管理的时候,希望添加事务管理的代码都必须写在注解出。