Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- web view
- 인덱스 여러개
- jdk 상세버전 확인
- 자바 버전 확인
- useGeneratedKeys
- /usr/lib/jvm
- sh shutdown.sh 오류
- 웹뷰 원격
- chrome://inspect
- 10진수
- 광고
- centos java
- foreign_key
- event scheduler
- centos java_home
- 웹뷰 디버깅
- ndk 오류
- centos 환경변수
- centos jre_home
- 안드로이드
- MySQL
- adjustNothig
- 이벤트 스케쥴러
- 키보드 사라짐
- 변환기
- arm-linux-androideabi
- gitignore 오류
- return 1
- 리눅스
- gitignore not working
Archives
- Today
- Total
개발자가 되고 싶은 1人
mysql, mybatis insert 성공시 저장된 pk 값 받아오기. 본문
mybatis에서 특정 테이블에 값을 저장한 뒤 최근에 저장된 pk값을 가져와야 될 때가 간혹 존재한다.
다른 블로그들에서 보면 여러 말들이 많은데. 안되는게 많더라.
또한 pk값은 불러 오는데 항상 1만 받아오는 경우도 있더라... (간단히 해결 가능)
1안.
<insert id="insertMaster" parameterType="Hashmap" statementType="PREPARED" useGeneratedKeys="true" keyColumn="MASTER_SEQ" keyProperty="masterSeq" >
INSERT INTO PRODUCT_MASTER (MEASURE_DATE, OD_SCORE) VALUES ( #{measureDate}, #{odScore} );
</insert>
2안.
<insert id="insertMaster" parameterType="Hashmap" statementType="PREPARED" useGeneratedKeys="true" keyColumn="MASTER_SEQ" keyProperty="masterSeq" >
INSERT INTO PRODUCT_MASTER (MEASURE_DATE, OD_SCORE) VALUES ( #{measureDate}, #{odScore} );
<selectKey keyColumn="MASTER_SEQ" keyProperty="masterSeq" resultType="Integer" order="AFTER">
SELECT LAST_INSERT_ID();
</selectKey>
</insert>
1안, 2안 각각 뭐가 정답이라기 보단 아무것이나 선택해도 된다.
단, 나같은 경우에는 2안보다는 1안이 간결하여 1안으로 진행을 하였음.
여기서 잘 알아야 되는 부분이 1안이든 2안이든 parameterType="Hashmap" 이곳이다. ( 밑줄 쫙 별이 다섯개★★★★★ )
많이들 실수 하는게 2안에서 <selectKey resultType="Integer"> </selectKey> 리턴 타입이 integer라서 아래와 같이 매퍼, 서비스의 리턴 타입을 int로 하는경우가 있는데 이때는 실제로 테이블에 저장된 키 값이 1이 아닌데도 자꾸 1만 리턴이 된다.
# 잘못된 예
<Mapper.java>
int insertMaster(Map<String, Object> map);
<Service.java>
int insertKey = productMapper.insertMaster(param1);
System.out.println("insertKey : ", insertKey);
==> insertKey : 1
↓↓↓↓↓
# 잘되는 예
<Mapper.java>
void insertMaster(Map<String, Object> map);
<Service.java>
productMapper.insertMaster(param1);
System.out.println("insertKey : ", param1.get("masterSeq"));
==> insertKey : 12
앞서 parameterType="Hashmap" 에서 해시맵을 파라미터로 받았을 경우 파라미터로 넘긴 맵에 저장되는 키 값이 들어간다.
추가로 parameterType에 맵이 아닌 VO를 넣을 경우 해당 vo에 키값의 변수가 존재하면 vo.getMasterSeq(); 이런 식으로도 저장된 키값을 가져올 수 있다.
끝.
'프로그래밍 > spring' 카테고리의 다른 글
[Jetbrains Intellij] .properties 인코딩 문제 해결 방법 (0) | 2022.03.03 |
---|
Comments