240118

한라봉봉·2024년 1월 18일
0

기업연계 BE 교육 TIL

목록 보기
47/58

트랜잭션

  • 데이터베이스에서는 상태변화를 위한 일련의 처리과정 단위

commit: transaction 내의 모든 처리를 성공적으로 종료하고 적용
rollback: transaction 처리도중 하나라도 실패한 경우 작업시작 이전으로 되돌리는 것.

ACID

원자성
일관성
독립성
지속성

Auto Commit

기본적으로 데이터 베이스는 AutoCommit 모드.

SET AUTOCOMMIT = true // false로 설정시 직접 커밋 관리.

쿼리 수행 후 바로 commit 처리됨.

트랜잭션시 @Transactional 사용

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;
}
profile
백엔드 개발공부 로그를 기록합니다

0개의 댓글