상세 컨텐츠

본문 제목

[Mytabis] Mybatis에서 currval() 사용 안 하는 이유

IT/SQL

by SINAFLA 2021. 5. 4. 11:34

본문

반응형

currval()란

  • 현재 테이블에 적용된 현재 시퀀스 번호를 조회할 때 사용한다.
  • 하지만 nextval()을 이용해 현재 트랜 잭션의 세션을 생성해주지 않으면 Mybatis에서 사용한 경우 에러가 난다.
  • 그리고 currval을 사용하지 않는 이유는 현재 트랜잭션과 nextval()을 사용해 세션이 생성된 시점이 같은지 우리는 알 수가 없다. 시점이 다를 수도 있다.
  • 그래서 mybatis에서는 currval을 이용해 현재 시퀀스를 조회 후 +1 값을 적용하지 않는다.

 

Mybatis에서 currval() 대신 사용하는 방법

SELECT 
        LAST_NUMBER 
FROM 
        USER_SEQUENCES 
WHERE 
        SEQUENCE_NAME = '시퀀스명(대문자)';

 

Mybatis에서 Insert문 실행 시 현재 시퀀스 값이 필요한 경우

  • insert문에서 현재 시퀀스 값을 넣어야 할 경우가 있다.
  • selectKey를 이용하면 된다.
<insert id="insertTest" parameterType="map">
	<selectKey keyProperty="no" order="BEFORE" resultType="long">
		select last_number from user_sequences where sequence_name = '시퀀스명'
	</selectKey>
	insert into board(
				id,
				title,
				content,
				regDte
) values (
				#{no},
				#{title},
				#{content},
				now()
)
</insert>

 

설명

  • keyProperty : selectKey 구문의 결과가 셋팅될 대상 프로퍼티
  • resultType : 결과의 타입
  • order : BEFORE나 AFTER를 셋팅할 수 있다. BEFORE로 설정하면 키를 먼저 조회하고 그 값을 keyProperty에 셋팅한 뒤 insert 구문을 실행한다. AFTER로 설정하면 insert 구문을 실행한 뒤 selectKey 구문을 실행한다.
반응형

'IT > SQL' 카테고리의 다른 글

[JPA] could not instance id generator  (0) 2021.07.22
postgreSQL 쿼리문 타입 오류  (1) 2021.06.06

관련글 더보기

댓글 영역