目录结构:
关键代码:
BookShopServiceImpl.java
1 package Spring支持的常用数据库事务传播属性和事务隔离级别.tx.service.impl; 2 3 import Spring支持的常用数据库事务传播属性和事务隔离级别.tx.dao.BookShopDao; 4 import Spring支持的常用数据库事务传播属性和事务隔离级别.tx.service.BookShopService; 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.stereotype.Service; 7 import org.springframework.transaction.annotation.Isolation; 8 import org.springframework.transaction.annotation.Propagation; 9 import org.springframework.transaction.annotation.Transactional; 10 11 12 /** 13 * @Transactional注解 14 * 该注解可以添加到类上,也可以添加到方法上 15 * 如果添加到类上,那么类中所有的方法都添加上了事务 16 * 如果添加到方法上,只有添加了该注解的方法才添加了事务 17 */ 18 //@Transactional 19 @Service("bookShopService") 20 public class BookShopServiceImpl implements BookShopService { 21 22 @Autowired 23 private BookShopDao bookShopDao; 24 25 //1.请简单介绍Spring支持的常用数据库事务传播属性和事务隔离级别? 26 27 /** 28 * 事务的属性: 29 * 1.★propagation:用来设置事务的传播行为 30 * 事务的传播行为:一个方法运行在了一个开启了事务的方法中时,当前方法是使用原来的事务还是开启一个新的事务 31 * -Propagation.REQUIRED:默认值,使用原来的事务 32 * -Propagation.REQUIRES_NEW:将原来的事务挂起,开启一个新的事务 33 * 2.★isolation:用来设置事务的隔离级别 34 * -Isolation.REPEATABLE_READ:可重复读,MySQL默认的隔离级别 35 * -Isolation.READ_COMMITTED:读已提交,Oracle默认的隔离级别,开发时通常使用的隔离级别 36 */ 37 @Transactional(propagation=Propagation.REQUIRES_NEW,isolation=Isolation.READ_COMMITTED) 38 @Override 39 public void purchase(int userId, String isbn) { 40 //1.获取要买的图书的价格 41 double bookPrice = bookShopDao.getBookPriceByIsbn(isbn); 42 // System.out.println(bookPrice); 43 //2.更新图书的库存 44 bookShopDao.updateBookStock(isbn); 45 //3.更新用户的余额 46 bookShopDao.updateAccountBalance(userId, bookPrice); 47 // double bookPriceByIsbn = bookShopDao.getBookPriceByIsbn(isbn); 48 // System.out.println(bookPriceByIsbn); 49 } 50 51 }
完整代码:
https://gitee.com/ZhangShunHai/interview_atguigu_seasonone/tree/master/ssm_spring%20transaction
课堂重点: