[Mybatis]Spring쇼핑몰 프로젝트 - selectKey 태그로 auto increment...

[Mybatis]Spring쇼핑몰 프로젝트 - selectKey 태그로 auto increment...

판매자 기능 중 상품을 업로드할 때 아래와 같은 순서로 데이터를 입력해야한다.

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 > Colored by Color Scripter 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 > Colored by Color Scripter 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); Colored by Color Scripter cs

selectkey의 결과값은 controller에서 위와 같이 받아올 수 있다.

from http://issaac.tistory.com/9 by ccl(A) rewrite - 2021-12-15 14:01:25