[STS3] 트랜잭션

1004다혜
|2024. 4. 24. 15:05

root-context.xml 에 bean 추가

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven/>

 

DB에 샘플 테이블 두개 생성

create table tbl_sample1(
    col1 varchar2(500)
);

create table tbl_sample2(
    col2 varchar2(50)
);

 

src/main/java 경로에 있는 mapper 패키지에 Sample1Mapper 인터페이스 추가 후 작성

public interface Sample1Mapper {
	
	public int insertCol1(String data);
	public int insertCol2(String data);
	
}

 

src/main/resources 경로에 있는 mappers 패키지에 Sample1Mapper.xml 생성 후 작성

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hanul.springstudent.mapper.Sample1Mapper">
	<insert id="insertCol1">
		INSERT INTO tbl_sample1(col1)
		VALUES (#{data})
	</insert>
	
	<insert id="insertCol2">
		INSERT INTO tbl_sample2(col2)
		VALUES (#{data})
	</insert>
</mapper>

 

src/main/java 경로에 있는 service패키지에 ISampleTxService 인터페이스 생성 후 추상메소드 작성

public interface ISampleTxService {
	public void addData(String value);
}

 

service패키지 안에 있는 impl 패키지에 SampleTxServiceImpl 클래스 생성 후 작성

@Service
@Log4j
public class SampleTxServiceImpl implements ISampleTxService{

	// 필드 주입 방식
//	@Autowired
//	private Sample1Mapper mapper;

	// 생성자 주입 방식
	private Sample1Mapper mapper;
	
	@Autowired
	public SampleTxServiceImpl(Sample1Mapper mapper) {
		this.mapper = mapper;
	}
	
	@Override
	public void addData(String value) {
		log.info("insertCol1...................");
		mapper.insertCol1(value);
		log.info("insertCol2...................");
		mapper.insertCol2(value);
	}
	
}

 

src/test/java 경로에 JUnit Test Case 생성 후 테스트 케이스 작성

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class SampleTxServiceTests {
	@Autowired
	private ISampleTxService service;
	
	@Test
	public void test() {
		String str = "Starry\r\n" + 
					 "Starry night\r\n" + 
					 "Paint your palette blue and grey\r\n" +
					 "Look out on a summer's day";
		log.info(str.getBytes().length);
		
		service.addData(str);
	}

}

 

빈공간 우클릭하여 JUnit Test 실행

 

우측 JUnit탭에 빨간색으로 뜨고 콘솔이 아래와 같이 뜸

 

DB에 가서 확인하면 tbl_sample1 테이블에만 데이터가 등록되었음

 

테이블 둘다 삭제 후 다시 똑같이 만든 후 SampleTxServiceImpl 클래스의 addData 메소드 위에 @Transactional 어노테이션 추가

 

다시 SampleTxServiceTests 로 돌아가서 JUnit 테스트 실행 후 DB확인!

두테이블에 모두 데이터가 저장되지 않았다면 성공!

'Programming > Spring' 카테고리의 다른 글

[STS3] 파일 업로드(2)  (0) 2024.04.24
[STS3] 댓글 기능(4)  (0) 2024.04.24
[STS3] 댓글 기능(3)  (0) 2024.04.23
[STS3] 댓글 기능(2)  (0) 2024.04.22
[STS3] 댓글 기능(1)  (0) 2024.04.22