JCF3 id
From JCFWiKi
Copyright © 2007 Daewoo Information Systems Co., Ltd. |
목차 |
[편집] 채번 관리
어플리케이션에서 일관되게 id나 번호 관리를 하기 위해 DB의 sequence를 사용하듯 어플리케이션 레벨에서 시퀀셜한 번호를 관리하도록 한다.
채번을 위한 테이블을 따로 두고, 각 어플리케이션의 모듈명과 현재 max id 값을 저장하도록 하며, 요청이 있을 때 번호를 1씩 증가시킨다.
[편집] 구조
Sequence 모듈은 단순하다. 모델은 테이블과 마찬가지로 모듈명을 위한 property와 id 값을 위한 property로 이루어져 있다.
SequenceDao는 두 개의 메소드가 있다.
- getNextId(String name):단순하게 일련번호로 id를 처리하는 경우 사용
- getNextId(String name, String prefix):일련번호의 앞에 특정 코드를 붙여 id 관리하는 경우 사용
[편집] 테이블 생성
SEQUENCE라는 테이블을 생성한다. 이 테이블은 두 개의 컬럼을 가지며 각 컬럼은 다음과 같다.
- NAME : 모듈명, varchar2(30)
- NEXT_ID : 현재 MAX ID 값, number
CREATE TABLE SEQUENCE( NAME varchar2(30) PRIMARY KEY NOT NULL, NEXT_ID number(10) NOT NULL);
[편집] Application 설정
Sequence dao와 statement xml은 jar내에 포함되어 있으므로 이를 사용하기 위해 다음과 같이 Applicationcontext파일에 추가하도록 한다.
[편집] ApplicationContext
<bean id="sequenceDAO" class="jcf.commons.id.dao.SequenceDaoIbatis"> <property name="sqlMapClient"><ref local="sqlMapClient"/></property> </bean>
[편집] sqlmap-config.xml
<sqlMapConfig> ... <sqlMap resource="jcf/dao/sqlmap/sql/Sequence.xml"/> ... </sqlMapConfig>
[편집] Sample Code
- 채번 모듈을 사용하기 위해서는 Service 클래스에 private 속성으로 SequenceDao를 선언하고, 이에 대한 setter 메소드를 구현한다.
[편집] ApplicationContext
- Service 클래스의 ApplicationContext bean 선언시 sequenceDao를 누락시키지 않도록 주의한다.
<bean name="bbsService" class="jcf.bbs.service.BBSService"> <property name="bbsDao" ref="bbsDao" /><property name="sequenceDao" ref="sequenceDao" /><property name="fileDao" ref="fileDao" /> </bean>
[편집] Service 에서의 호출
- private 변수 선언
- setSequenceDao 메소드 생성
- sequenceDao.getNextId 메소드를 호출하고 parameter로 고유한 모듈명 넘김
public class BBSService { private BBSDao bbsDao;private SequenceDao sequenceDao;private AttachmentManager attachmentManager;private IFileDao fileDao; public int insertBBS(BBS bbs) throws ParseException { int id = 0; int attachmentId = 0;
id = sequenceDao.getNextId("bbs");bbs.setId(id);bbs.setParentId(id); List files = bbs.getFiles(); if ((files != null) && (files.size() > 0)) { attachmentId = sequenceDao.getNextId("attachment"); bbs.setAttachmentId(Integer.toString(attachmentId)); } bbsDao.insertBBS(bbs); if ((files != null) && (files.size() > 0)) { attachmentManager.saveFileInfo(files, attachmentId); } return id; } public void setBbsDao(BBSDao bbsDao) { this.bbsDao = bbsDao; } public void setFileDao(IFileDao fileDao) { this.fileDao = fileDao; }
public void setSequenceDao(ISequenceDao sequenceDao) {this.sequenceDao = sequenceDao;} public void setAttachmentManager(AttachmentManager attachmentManager) { this.attachmentManager = attachmentManager; }
...



