package com.highcom.seqgen.dao.jdbc; import java.sql.*; import javax.sql.*; import org.apache.commons.logging.*; import org.springframework.beans.factory.*; import org.springframework.context.*; import org.springframework.jdbc.core.*; import org.springframework.jdbc.object.*; import com.highcom.seqgen.dao.*; import com.highcom.seqgen.domain.*; public class SequenceDaoJdbcImpl implements SequenceDao, InitializingBean {
private DataSource dataSource; private static Log logger = LogFactory.getLog(SequenceDaoJdbcImpl.class); // SequenceQuery sequenceQuery; SequenceUpdate sequenceUpdate; SequenceInsert sequenceInsert; // protected static final String INSERT_SQL = "insert into sequence(seq_name,seq_value) values( ? , ? )"; protected static final String UPDATE_SQL = "update sequence set seq_value = ? where seq_name = ?"; protected static final String SELECT_SQL = "select seq_name,seq_value from sequence where seq_name =?"; public SequenceDaoJdbcImpl() { } public int getSequence(String seq_name) { int result; Object obj = sequenceQuery.findObject(new Object[] {seq_name}); if (obj == null) { sequenceInsert.insert(seq_name, 0); } Sequence seq = (Sequence) sequenceQuery.findObject(new Object[] {seq_name}); sequenceUpdate.update(seq.getName(), seq.getValue() + 1); result = seq.getValue() + 1; return result; } public void afterPropertiesSet() throws Exception { if (dataSource == null) { logger.error("Must set dataSource bean property on " + getClass()); throw new ApplicationContextException( "Must set dataSource bean property on " + getClass()); } // sequenceQuery = new SequenceQuery(this.dataSource); sequenceUpdate = new SequenceUpdate(this.dataSource); sequenceInsert = new SequenceInsert(this.dataSource); } public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } ///////////////////////jdbc内部类 class SequenceInsert extends SqlUpdate { public SequenceInsert(DataSource dataSource) { super(dataSource, INSERT_SQL); declareParameter(new SqlParameter(Types.VARCHAR)); declareParameter(new SqlParameter(Types.INTEGER)); compile(); } public void insert(String seqName, int segValue) { Object[] objs = new Object[] { seqName, new Integer(segValue)}; super.update(objs); } } class SequenceUpdate extends SqlUpdate { public SequenceUpdate(DataSource dataSource) { super(dataSource, UPDATE_SQL); declareParameter(new SqlParameter(Types.INTEGER)); declareParameter(new SqlParameter(Types.VARCHAR)); compile(); } public void update(String seqName, int segValue) { Object[] objs = new Object[] { new Integer(segValue), seqName}; super.update(objs); } } class SequenceQuery extends MappingSqlQuery { public SequenceQuery(DataSource dataSource) { super(dataSource, SELECT_SQL); declareParameter(new SqlParameter(Types.VARCHAR)); compile(); } protected Object mapRow(ResultSet resultSet, int _int) throws SQLException { Sequence seq = new Sequence(); seq.setName(resultSet.getString("seq_name")); seq.setValue(resultSet.getInt("seq_value")); return seq; } } }

|