commit: transaction 내의 모든 처리를 성공적으로 종료하고 적용
rollback: transaction 처리도중 하나라도 실패한 경우 작업시작 이전으로 되돌리는 것.
원자성
일관성
독립성
지속성
기본적으로 데이터 베이스는 AutoCommit 모드.
SET AUTOCOMMIT = true // false로 설정시 직접 커밋 관리.
쿼리 수행 후 바로 commit 처리됨.
private 로 설정한 method의 경우 객체 생성시 사용할수 없기 때문에 public 으로 선언해야 한다.
클래스는 public, private가 상관없다. 객체생성에는 문제없으므로..
method 단위에서도 사용가능하다.
@Service("orderService")
@Transactional(propagation=Propagation.REQUIRED)
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService {
private final OrderDAO orderDAO;
public List<OrderVO> listMyOrderGoods(OrderVO orderVO) throws Exception{
List<OrderVO> orderGoodsList;
orderGoodsList=orderDAO.listMyOrderGoods(orderVO);
return orderGoodsList;
}
public void addNewOrder(List<OrderVO> myOrderList) throws Exception{
orderDAO.insertNewOrder(myOrderList);
//카트에서 주문 상품 제거한다.
orderDAO.removeGoodsFromCart(myOrderList);
}
public OrderVO findMyOrder(String order_id) throws Exception{
return orderDAO.findMyOrder(order_id);
}
public List<GoodsVO> goodsDeliveryPrice(List<OrderVO> myOrderList) throws DataAccessException {
return orderDAO.goodsDeliveryPrice(myOrderList);
}
인터페이스에서 throws Exception을 처리해주면, 트랜잭션 내에서 오류발생시 Spring에서 캐치하여 rollback해준다.
public interface OrderService {
public List<OrderVO> listMyOrderGoods(OrderVO orderVO) throws Exception;
public void addNewOrder(List<OrderVO> myOrderList) throws Exception;
public OrderVO findMyOrder(String order_id) throws Exception;
public List<GoodsVO> goodsDeliveryPrice(List<OrderVO> myOrderList) throws DataAccessException;
}