판매자 기능 중 상품을 업로드할 때 아래와 같은 순서로 데이터를 입력해야한다.
1. goods테이블에 상품정보 데이터 insert
2. option테이블에 상품 옵션정보 데이터 insert
여기서 option테이블은 goods테이블의 gds_num(AI, PK)를 fk로 참조하고있다.
gds_num은 pk이기 때문에 insert가 끝난 뒤 select를 통해 값을 받아오기가 힘들다.
그렇기 때문에 하나의 요청에서 1번 insert가 끝난 직후 auto increment / currval 값을 돌려받고,
그 값을 setter메소드로 값을 설정하여 2번insert를 수행해야 한다.
insert의 경우 retrun값은 1 또는 0이기 때문에,
selectKey 태그를 활용하여 auto increment / currval 값을 가져와야 한다.
1-1. MySQL - goodsMapper.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<insert id="goods_insert" parameterType="goods">
insert into goods
(lcate_code, mcate_code, scate_code, gds_seller, gds_name, gds_thumbnail, gds_date,
gds_price, gds_detail, deltem_num,
gds_ears, gds_readcount, gds_sellcount, gds_viewyn)
values
(#{lcate_code}, #{mcate_code}, #{scate_code}, #{gds_seller}, #{gds_name}, #{gds_thumbnail}, now(),
#{gds_price}, #{gds_detail}, #{deltem_num},
#{gds_ears}, 0, 0, 'Y')
<selectKey keyProperty="gds_num" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
|
cs |
1-2. Oracle - goodsMapper.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<insert id="goods_insert" parameterType="goods">
insert into goods
(gds_num, lcate_code, mcate_code, scate_code, gds_seller, gds_name, gds_thumbnail, gds_date,
gds_price, gds_detail, deltem_num,
gds_ears, gds_readcount, gds_sellcount, gds_viewyn)
values
(sq_gds_num.NEXTVAL, #{lcate_code}, #{mcate_code}, #{scate_code}, #{gds_seller}, #{gds_name}, #{gds_thumbnail}, sysdate,
#{gds_price}, #{gds_detail}, #{deltem_num},
#{gds_ears}, 0, 0, 'Y')
<selectKey keyProperty="gds_num" resultType="number" order="AFTER">
SELECT sq_gds_num.CURRVAL FROM DUAL
</selectKey>
</insert>
|
cs |
selectkey태그의 속성
- keyProperty : 결과값이 저장될 컬럼명
- resultType : 결과값의 데이터타입
- order : 해당 쿼리의 실행순서, After로 설정하면 insert 구문을 실행한 뒤에 selectKey 구문을 실행한다.
2. GoodsController.java
1
2
3
4
5
6
7
8
9
10
11
|
// 1. goods insert
GoodsVO goods = request.getParameter("goods"); // 입력한 상품정보 받아오기
goodsService.goods_insert(goods); // 저장 메소드 호출
int gds_num = goods.getGds_num(); // selectKey 결과값 받아오기
// 2. option insert
OptionVO option = new OptionVO();
String opt_count = request.getParameter("opt_count"); // 옵션 수량 받아오기
option.setGds_num(gds_num); // setter 메소드로 selectKey 결과값 넣기
option.setOpt_count(Integer.parseInt(opt_count));
optionService.option_insert(option);
|
cs |
selectkey의 결과값은 controller에서 위와 같이 받아올 수 있다.
'Spring > Mybatis' 카테고리의 다른 글
[MyBatis] Spring쇼핑몰 프로젝트 - Mapper에 parameter 여러개 넘기기 (0) | 2021.12.11 |
---|