티스토리 뷰
게시판을 만들면서 DB에 시퀀스 사용이 필요해졌다.
먼저 시퀀스란 자동 증가 컬럼으로, 게시판에 글을 등록하게 되면 자동으로 게시글 번호가 만들어질 때 사용하게 된다.
시퀀스를 사용하면 VALUES 값 안에 아래와 같은 형식으로 코드를 작성 할 수 있다.
select rep_rnum.NEXTVAL from ntb_reply
하지만 value 값 안에 넣어서 코드를 작성하게 되면 중간에 값이 변형 될 수 있다는 단점이 있다.
차장님이 시퀀스보다 selectKey를 이용해서 구현하는 방법을 알려주셨다.
mybatis에서 제공하는 selectKey를 이용하면 별도의 쿼리 로직을 등록할 필요 없이 해당 메소드에서 일괄처리 할 수 있다.
ntb_reply라는 테이블 안에있는 rep_rnum이라는 컬럼 값을
1씩 증가시키고자 할 때 아래와 같이 코드를 작성하였다.
SELECT COALESCE(max(rep_rnum),0)+1 from ntb_reply
COALESCE 함수
먼저 COALESCE 함수를 살펴보자.
사전적으로는 합치다 라는 의미를 가지고 있고, NULL이 아닌 값을 만나면 리턴하는 함수이다.
ex) COALESCE(a, b)
a의 필드 값이 있을 경우에 a 데이터 값을 리턴하고 a의 값이 NULL이면 b의 데이터를 리턴한다.
따라서 위의 예제에서는 rep_rnum의 값이 있으면 max(rep_rnum)의 값을 리턴, rep_rnum의 값이 NULL이면 0을 리턴한다.
selelctKey 태그
selectKey 태그를 살펴보자
<selectKey resultType = "int" keyProperty="rep_rnum" order="BEFORE">
SELECT COALESCE(max(rep_rnum),0)+1 from ntb_reply
</selectKey>
resultType는 리턴될 값을 형
keyProperty는 리턴받을 변수명
order은 순서로, before 또는 after를 셋팅할 수 있다. before로 설정하면 키를 먼저 조회하고 그 값을 keyProperty에 셋팅한 뒤 insert 구문을 실행한다. after로 설정하면 insert 구문을 실행한 뒤 selectKey 구문을 실행한다.
<!-- 댓글 정보 DB에 추가 -->
<insert id="insertBoardReply" parameterType="boardVO" >
<selectKey resultType = "int" keyProperty="rep_rnum" order="BEFORE">
SELECT COALESCE(max(rep_rnum),0)+1 from ntb_reply
</selectKey>
INSERT INTO ntb_reply
(
rep_rnum
, rep_regdate
, rep_contents
, post_pnum
, user_id
)
VALUES
(
#{rep_rnum}
, NOW()
, #{rep_contents}
, #{post_pnum}
, #{rep_user_id}
)
</insert>
Ref.
https://yookeun.github.io/java/2014/07/11/mybatis-selectkey/
'Spring' 카테고리의 다른 글
취약점 점검 오류 수정 | Sparrow (0) | 2023.01.10 |
---|---|
spring 데이터베이스 연결 (다중DB, 전자정부프레임워크, Postgresql, MariaDB) (0) | 2022.09.20 |
[mybatis] if 조건문 사용하기 (0) | 2022.09.14 |
이클립스 target파일 제외하기 (0) | 2022.04.21 |
AJAX 통신 사용해보기 (0) | 2022.04.04 |
- Total
- Today
- Yesterday
- 엑셀POI
- 공간데이터
- 공간데이터병합
- shp2pgsql
- 폐쇄망에서rpm설치
- Geoserver
- jdbcType
- SVN
- 폐쇄망에서패키지설치
- apachepoi
- yumdownloader
- getRow
- Some resources were not updated.
- 인터넷안되는환경에서설치
- createRow
- su postgres 안됨
- setForceFormulaRecalculation
- Postgresql12
- yumrepository
- 리눅스
- CreateCell
- 부하측정
- postgis 설치
- Centos7에서 Postgresql12 설치
- svn프로젝트불러오기
- Postgis
- OpenLayers
- mybatisif
- 리눅스폐쇄망
- getCell
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |