mappert에서 selectKey로 foldersId를 받아오도록 했는데 로그에 return을 찍어보니 계속 1을 반환하는 상황이었다.
오늘도 강력한 삽질의 느낌이 왔는데 내가 예전에 작성한 내 코드를 보고 힌트를 얻어서 해결했다. 또르르,,,
또 까먹고 삽질할까 봐 기록한다.
<insert id="insertFolders">
insert into Folders (folderName, localPath, virtualPath) Values (#{folderName}, #{localPath}, #{virtualPath});
<selectKey keyProperty="foldersId" resultType="Integer" order="AFTER">
SELECT @@IDENTITY
</selectKey>
</insert>
위와 같은 mapper를 작성하고 domain layer에서 당연히 return을 int로 받을 수 있다고 생각하고
아래 코드에서 주석처리한 부분처럼 계속 fodersId 변수를 로그에도 찍어보고 별짓을 다했으나,
위와 같이 selectKey를 작성한 경우,
매개변수로 사용한 folders라는 VO에 있는 foldersId에 identity값을 저장하여 리턴한다.
그래서 주석부분 아랫줄과 같이 insert 로직을 실행한 후,
VO에 저장되어있는 foldersId 값을 이용해 return을 하도록 수정하였다.
public int getFoldersId(String folderName) {
log.info("[UU] getFoldersId()... ");
FoldersVO folders = new FoldersVO();
folders.setFolderName(folderName);
folders.setLocalPath(Paths.get(rootPath, boardPath).toString());
folders.setVirtualPath(virtualPath);
if(!checkFolder(folderName)) {
log.info("[UU] insertFolders()... ");
//int fordersId = mapper.insertFolders(folders); //fordersId = 1
mapper.insertFolders(folders);
return folders.foldersId;
}
else {
log.info("[UU] selectFoldersByFolderName()... ");
folders = mapper.selectFoldersByFolderName(folders.getFolderName());
return folders.getFoldersId();
}
}
댓글