Spring JDBC에서는 Object에서는 Oracle 데이터베이스의 SEQUENCE와 같은 생성 기능을 지원하고 있다. 이때 프로젝트에서 사용하고 있는 데이터베이스의 종류에 따라 다른 방식으로 Primary Key 생성 기능을 제공하고 있다. Oracle데이터베이스와 같이 SEQUENCE를 사용하는 경우에는 SEQUENCE를 이용하며, 그렇지 않은 경우에는 별도의 테이블을 통하여 SEQUENCE와 같은 역할을 하도록 구현하는 것이 가능하다.
[예제4-13]applicationContext.xml
<beans>
<bean id="boardIncrementer" class="org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer">
<property name="dataSource" ref="dataSource" />
<property name="incrementerName" value="BOARDSEQUENCE" />
<property name="columnName" value="VALUE" />
</bean>
<bean id="boardFileIncrementer" class="org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer">
<property name="dataSource" ref="dataSource" />
<property name="incrementerName" value="BOARDFILESEQUENCE" />
<property name="columnName" value="VALUE" />
</bean>
<bean id="boardDAOTarget" parent="myJdbcDaoSupport" class="net.javajigi.board.dao.SpringJDBCWithTemplateBoardDAO">
<property name="incrementer">
<ref local="boardIncrementer" />
</property>
</bean>
<bean id="boardFileDAOTarget" parent="myJdbcDaoSupport" class="net.javajigi.board.dao.SpringJDBCWithMSBoardFileDAO">
<property name="incrementer">
<ref local="boardFileIncrementer" />
</property>
</bean>
... 중간 생략 ...
</beans>
[예제4-14]SpringJDBCWithMSBoardDAO.java
package net.javajigi.board.dao;
public class SpringJDBCWithMSBoardDAO extends MyJdbcDaoSupport implements
BoardDAO {
public Board insert(Board board) throws DataAccessException {
int boardNo = getIncrementer().nextIntValue();
board.setBoardNo(boardNo);
Object[] values = { new Integer(boardNo), board.getTitle(),
board.getName(), board.getEmail(), board.getPassword(),
board.getCreateDate(), board.getContent() };
insert.update(values);
return board;
}
}
org.springframework.jdbc.support.incrementer 패키지를 보면 MySQL 데이터베이스뿐만 아니라 다른 데이터베이스를 지원하기 위한 클래스들을 확인할 수 있다.
[출처] Spring JDBC - 4.Primary Key 생성 기능|작성자 타이거
SSISO Community