Database

mybatis selectkey

k9e4h 2017. 2. 2. 18:03

http://msfury.tistory.com/9

http://www.raistudies.com/mybatis/inserting-auto-generated-id-using-mybatis-return-id-to-java/


selectkey가 위에 있는 경우

selectkey를 먼저 수행 후 발급된 번호를 변수에 두고 sql에서 발급된 값을 이용

selectkey가 아래에 있는 경우

sql 수행시 seq를 발급하고 발급된 번호를 selectkey를 통해서 가져옴


1
2
3
4
5
6
7
8
for(int i=0; i<list.size(); i++){
    if(list.get(i).getSeq() == 0){
        dao.insertForVO(list.get(i));
    }else{
        dao.updateForVO(list.get(i));
    }
    dao.insertForVOHistory(list.get(i));
}
cs


save라는 function을 만드는 중

seq가 없으면 insert, seq가 있으면 update를 한다.

이러한 동작후 history table에 insert하는데 update시에는 이미 seq를 가지고 있기 때문에 상관 없지만 insert의 경우 seq를 처음에는 가지고 있지 않았기 때문에 selectkey를 통해 seq를 알아 와야한다.


dao, service 아무것도 수정할 필요없고 mapper만 변경해주면 됨.

key를 return 한다 그래서 dao의 return을 넣어주면 안됨.

selectkey를 하면 return이라기보다는 vo에 mapping 해주는 것임


selectkey 에서 계속 1이 오는 경우 는 무엇일까?

insert의 return은 insert 된 row의 개수이다. 계속 1개가 insert 되고 있으니까 insert를 return 하면 1이 나오지! key 값을 얻고 싶으면 return을 하는 게 아니라 mapping 된 vo를 확인하라!!


반응형

'Database' 카테고리의 다른 글

MYSQL 날짜 형식  (0) 2017.02.13
SQL 특정 기간 중복 조회하기  (0) 2017.02.07
SQL JOIN  (0) 2017.01.06
SQL CHAR와 VARCHAR의 차이  (0) 2017.01.04
[Mybatis] resultType & resultMap  (0) 2016.11.30