작업하다가 (MariaDb) autoincrement 인가에서 찜찜함을 느낌. 


 인서트 하자마자 인서트한 값의 시퀀스를 얻으려면 select max( seq ) 를 해줘야 


하는데.. 영 찜찜..  그래서 보니.. idGnrService 라는게 있음.


 오라클에선 시퀀스 테이블 사용하면 되니 딱히 필요 없을듯.



 

 

 

1. 테이블 생성 나는 테이블명을 seqs 로 지정했다.
  참고로 NEXT_ID 도 변경해주려 했으나.. 여튼 변경 노노..


CREATE TABLE `seqs` (
`TABLE_NAME` VARCHAR(30) NOT NULL,
`NEXT_ID` DECIMAL(30,0) NULL DEFAULT NULL,
PRIMARY KEY (`TABLE_NAME`)

 

 





2. 인서트 두방 해준다.


INSERT INTO SEQS VALUES('NOTICE',  10 );


INSERT INTO SEQS VALUES('BOARD_FILE',  10 );


키를 생성하면서 전자정부프레임워크에서 이 테이블을


얻데이트 시켜준다. 아래서 설명할건데  blockSize 가 10이면


10씩 늘어난다. 

 

 

 



3.  context-idgen.xml  수정


  난 NOTICE ,  BOARD_FILE  두게의 키생성이 필요했다. 두게 만들었다.
  blockSize 는 10 늘어나고 나서 디비를 얻데이트 하겠다는 의미.
  
 table 은 2번에서 생성한 테이블명.
 tableName 은 2번에서 인서트한 값과 매치.






<bean name="noticeIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
<property name="dataSource" ref="dataSource" />
<property name="blockSize" value="10"   />
<property name="table"     value="SEQS"   />
<property name="tableName" value="NOTICE"   />
</bean>




<bean name="boardFileIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
<property name="dataSource" ref="dataSource" />
<property name="blockSize" value="10"   />
<property name="table"     value="SEQS"   />
<property name="tableName" value="BOARD_FILE"   />
</bean>









 

 

 

 

 



4. 사용하면 된다.


 serviceImpl.java 에서 사용했는데


@Resource(name = "boardFileIdGnrService")
private EgovIdGnrService boardFileIdGnrService;


  상단에 이거 넣어서 선언해주고....


String seq_board =  boardFileIdGnrService.getNextStringId();


 하면 키 생성 끝.





 

 

 

 

 

 

Posted by 혜화초보
,