网上书城·小知识点(事务方法)
一、什么是事务?
事务是恢复和并发控制的基本单位。并具有4个属性:原子性、一致性、隔离性、持续性。(支付即事务方法)
二、事务方法演示
/**
* 业务方法:结账操作
* @param shoppingCart
* @param username
* @param accountId
*/
public void cash(ShoppingCart shoppingCart, String username, String accountId) {
//1.更新mybooks数据表相关记录的salesamount和storenumber
((BookDaoImpl) bookDao).batchUpdateStoreNumberAndSalesAmount(shoppingCart.getItems());
//2.更新account数据表的balance
accountDao.updateBalance(Integer.valueOf(accountId), shoppingCart.getTotalMoney());
//3.向trade数据表插入一条记录
Trade trade = new Trade();
trade.setTradetime(new Date(new java.util.Date().getTime()));
trade.setUserid(userDao.getUser(username).getUserid());
tradeDao.insert(trade);
//4.向tradeitem数据表插入n条记录
Collection items = new ArrayList();
for(ShoppingCartItem sci : shoppingCart.getItems()){
TradeItem tradeItem = new TradeItem();
tradeItem.setBookid(sci.getBook().getId());
tradeItem.setQuantity(sci.getQuantity());
tradeItem.setTradeid(trade.getTradeid());
items.add(tradeItem);
}
tradeItemDao.batchSave(items);
//5.清空购物车
shoppingCart.clear();
} items = new ArrayList();
for(ShoppingCartItem sci : shoppingCart.getItems()){
TradeItem tradeItem = new TradeItem();
tradeItem.setBookid(sci.getBook().getId());
tradeItem.setQuantity(sci.getQuantity());
tradeItem.setTradeid(trade.getTradeid());
items.add(tradeItem);
}
tradeItemDao.batchSave(items);
//5.清空购物车
shoppingCart.clear();
}