혜미의 개발 일지

[SQL] selectkey 본문

DB

[SQL] selectkey

혜미 2022. 4. 12. 11:34
반응형

 

들어가기전에

xml은 마크업언어이다.

그리고 마크와 마크 사이는 프로그램하나의 함수라고 생각하면 selectkey의 개념을 이해하기 쉽다.

 

[설명]

selectkey 의 사용은 우리가 어떤 생성된 코드를 바로 다른 쿼리에서 사용하고 싶을때 사용한다.

예를 들어 아래쿼리와 같이 내가 하나의 site_id를 새로 생성해 넣는다고 가정하자.

site_id를 insert시킬때 함수로 site 테이블에는 넣어서 생성했는데

바로 그 site_id를 사용해서 다른 테이블에 넣고 싶을때 어떻게 해야할까?

원래대로라면 아래쿼리가 작동된후 site테이블에서 site_id를 조회한 후 그 값을 가져다가 다른테이블에 inset시켜야할 것이다.

하지만 작업이 ui에서 동시에 이뤄지는 작업이라서 DB를 통해 site_id값을 파라미터로 받아올 수 없을 때

selectkey 를 이용하면 해당 쿼리에서 리턴형식으로 보관했다가 다른 쿼리에 받아서 사용할 수 있다.  

 

[코드 및 실습]

	<insert id="insertSite" parameterType="siteVO" >
		/** insertSite :::  사이트를 저장한다. */
		<![CDATA[	
			DECLARE @SITE_ID VARCHAR(20);
			
			SELECT 
				@SITE_ID = RIGHT( '000' + CONVERT( VARCHAR(10), ISNULL( MAX( CONVERT( INT, SITE_ID ) ), 0) + 1 ) , 8 ) 
			FROM DBO.SITE_MST_T;
			
			INSERT INTO DBO.SITE_MST_T ( 
				SITE_ID
				, CREATED_AT 
			) VALUES (
				@SITE_ID
				,GETDATE()
			)
		]]>
		<selectKey keyProperty="siteId" resultType="String" order="AFTER">
	       SELECT TOP 1 SITE_ID AS siteId FROM DBO.SITE_MST_T ORDER BY SITE_ID DESC
	    </selectKey>
	</insert>


이렇게 site_id 생성시 쿼리 마지막에 삽입해 값을 담아두면 된다. 

작성 방식은 ibaytis 나 mubatis 일때마다 다르다. 그러니 잘 검색해서 사용해야한다.

그리고 저기서 스트링 형식으로 리턴값을 선언하였기에 sreviceDAO에서 이렇게 값을 작성해야 받아올 수 있었다.

		public String insertSite(SiteVO siteVO)throws Exception{
			return String.valueOf( insert("insertSite",siteVO) );
		}

 

 

[마무리 참조] ibaytis 나 mubatis 적용시 이슈 참조

 

mybatis, ibatis selectKey 이슈 해결

selectKey 이슈 해결

velog.io

 

 

 

참고 : 필자의 개인적 이해를 바탕으로 쓴 글임으로 만일, 잘못된 정보나 지식이 있다면 알려주시길 바랍니다.

 

반응형
BIG
Comments