Springboot 서비스에서 트랜잭션처리

최주영·2024년 3월 7일
0

springboot

목록 보기
13/14

@Transactional 어노테이션을 통해 트랜잭션 처리

  • Service 부분에서 작성
  • 해당 메소드에서 다른 메소드들을 호출해서 여러 서비스 실행
  • 하나라도 실패시 모두다 rollback 처리 됨
  • 내부 메소드들은 원래는 private 로 만드는 것이 원칙
package com.joo.usedmarket.product.service;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.joo.usedmarket.category.dto.CategoryDto;
import com.joo.usedmarket.product.dao.ProductDao;
import com.joo.usedmarket.product.dto.ProductDto;
import com.joo.usedmarket.product.dto.ProductFileDto;

@Service
public class ProductServiceImpl implements ProductService {

	private SqlSession session;
	private ProductDao dao;
	
	public ProductServiceImpl(SqlSession session,ProductDao dao) {
		this.session = session;
		this.dao = dao;
	}
	
	@Transactional
	public int productRegist(ProductDto p) {
		int cnt = 0;
		int result = insertProduct(p); // 제품 추가 서비스
		if(result == 1) {
			System.out.println("상품은 문제없다");
			cnt++;
		}
		for(int i=0; i<p.getFiles().size(); i++) {
			if(i==0) {
				 p.getFiles().get(i).setMainImageYn('Y');
			}else {
				p.getFiles().get(i).setMainImageYn('N');
			}
			cnt++;
			insertProductFile(p.getFiles().get(i));
		}
/*		for(ProductFileDto file : p.getFiles()) {
			insertProductFile(file); // 제품에 대한 다수의 이미지 추가 서비스 (1:N)
		}*/
		
		return cnt;
	}
	
	@Override
	public int insertProduct(ProductDto p) {
		return dao.insertProduct(session,p);
	}
	
	@Override
	public int insertProductFile(ProductFileDto file) {
		return dao.insertProductFile(session,file);
	}

}

  • 컨트롤러
int result = service.productRegist(p); // 트랜잭션으로 제품 및 다수의 제품 이미지 테이블 추가

profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글