카테고리 없음
<selectkey> 이용해서 insert 된 pk 값 가져오기, LAST_INSERT_ID does not exist 오류
원코드
2023. 3. 14. 14:54
<insert> 태그 안에 <selectkey>태그를 작성하고, selectkey 태그 안에 SELECT last_insert_id() 를 작성해주면 된다.
결과값은 insert 태그의 parameterType으로 들어온 VO로 전달되기 때문에 keyProperty는 pk값이 들어갈 변수 이름으로, resultType은 그 변수의 데이터 타입으로 작성하면 됨.
<mapper.xml>
<insert id="apiInsert" parameterType="com.devhouse.pm.api.item.DocsInfo">
INSERT INTO pm.apiMain
(
//생략
)
VALUES
(
//생략
)
<selectKey keyProperty="idx" resultType="int" order="AFTER">
SELECT last_insert_id()
</selectKey>
</insert>
<mapper.java>
fun apiInsert(info: DocsInfo): Int
<service>
@Transactional(rollbackFor = [Exception::class, RuntimeException::class])
fun apiInsert(info: DocsInfo): ResultInfo {
var codeManager: CodeManager
mapper.apiInsert(info) //insert 쿼리
var recordInfo = RecordInfo()
recordInfo.apiIdx = info.idx //selectkey에서 얻어온 값
recordInfo.content = "최초 등록"
recordInfo.memIdx = info.memIdx
mapper.apiRecord(recordInfo)
codeManager = CodeManager.SUCCESS
return ResultInfo(codeManager.code, codeManager.msg)
}
주의할 점은 selectkey로 받아온 pk이 값이 insert문의 리턴값인 mapper.apiInsert(info)로 오는게 아니라 파라미터로 넘겨줬던 info에 들어있기 때문에 info.idx로 값을 가져와야한다.
문제는 계속 pm.LAST_INSERT_ID dose not exist 에러가 났다는 건데, 자꾸 함수 앞에 스키마가 붙어서 문제였다. 혹시나 해서 소문자로 썼더니 해결...대소문자 별로 안중요한것 같아도 중요하다.