- selectkey2024년 10월 15일
- chantleman
- 작성자
- 2024.10.15.:39
selectKey는 MyBatis에서 제공하는 기능으로
insert 구문을 실행하기 전이나 후에 특정 키값을 조회해서 파라미터 객체에 설정할 수 있게 해준당
주로 자동 생성되는 키 값을 얻거나 다음 시퀀스 값을 미리 조회하는데 사용되며
데이터 삽입 후 자동 생성된 키를 가져와서 추가적인 쿼리 없이도 필요한 키 값을 빠르게 얻을 수 있당
- 자동 생성 키 가져오기: 삽입 후에 자동 생성된 키를 빠르게 가져오는 데 유용
- 불필요한 쿼리 감소: 별도로 키를 가져오는 쿼리를 작성할 필요가 없어 전체 쿼리 수 감소
- 트랜잭션 관리: 삽입과 키 조회를 하나의 트랜잭션으로 묶어 관리해 일관성 유지
<selectKey resultType="키 타입" order="AFTER/BEFORE" keyProperty="">
<insert id="createPost" parameterType="kr.or.ddit.vo.LprodVO"> <selectKey resultType="int" order="BEFORE" keyProperty="lprodId"> SELECT NVL(MAX(lprod_id),0)+1 FROM lprod </selectKey> insert into lprod values(#{lprodId},#{lprodGu},#{lprodNm}) </insert>
요론식으로 Insert 하기 전에 selectKey로 id 조회해서 삽입하는 용도로 사용한당
근데 아래처럼 하면 안되낭?
<insert id="createPost" parameterType="kr.or.ddit.vo.LprodVO"> insert into lprod values((SELECT NVL(MAX(lprod_id),0)+1 FROM lprod),#{lprodGu},#{lprodNm}) </insert>
해도 insert가 되기는 하지만
detail 페이지로 넘어갈때 파라미터가 0으로 들어간당 !!
jsp에서 id를 controller로 안넘겨줘서 VO에 안담기게 돼서 0으로 들어가는 거시당
그래서 인라인서브쿼리로 하게되면 VO에 자동 설정되지 않아서 id를 select하는 별도의 쿼리를 작성해야하는 수고로움이 있당 ㅜㅜ
하지만 selectKey를 사용하면 jsp에서 id를 넘겨주지 않아도 자동으로 VO에 들어가져서 바로 id값을 불러올 수 있는 것이당
<insert id="createPost" parameterType="kr.or.ddit.vo.LprodVO"> <selectKey resultType="int" order="BEFORE" keyProperty="lprodId"> SELECT NVL(MAX(lprod_id),0)+1 FROM lprod </selectKey> insert into lprod values(#{lprodId},#{lprodGu},#{lprodNm}) </insert>
예를 들어 위 코드는 keyProperty="lprodId"는 조회된 값을 lprodId라는 VO객체의 속성에 저장하는 것이당
728x90'자바' 카테고리의 다른 글
MyBatis ResultMap - Collection, Association (0) 2024.11.20 iterator (1) 2024.11.09 forward, sendredirect (0) 2024.10.15 전자정부프레임워크 개발환경구축 (0) 2024.10.11 싱글톤 (0) 2024.10.08 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)