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; } }
}