我们在MyBatis 中可以使用Oracle的自增长,可以使用配置文件和Java代码来获取当前自增的最大值。
首先,需要自己在Oracle创建一个自增,命令如下。
CREATE SEQUENCE "COMMONTRADE"."UCF_RECHARGE_SUBORDER_SEQ" MINVALUE 10000000000 MAXVALUE 99999999999 INCREMENT BY 1 START WITH 10000007200 CACHE 200 NOORDER NOCYCLE ;
第二步:使用Spring 对Oracle 序列的支持配置。需要配置到applicationContext.xml 中。
<bean id="oracleSequenceMaxValueIncrementer" class="org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer"> <property name="incrementerName" value=""></property> <property name="dataSource" ref="dataSource"></property> </bean>
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer; import org.springframework.stereotype.Service; import com.ucf.trade.util.enums.TradeEnum; @Service public class SequenceGenerator { private static final String UCF_RECHARGE_TRADE_ORDER_SEQ = "UCF_RECHARGE_TRADE_ORDER_SEQ"; @Autowired public OracleSequenceMaxValueIncrementer oracleSequenceMaxValueIncrementer; public String nextRechargeOrderSeq(String bizProduct , String txnType){ oracleSequenceMaxValueIncrementer.setIncrementerName(UCF_RECHARGE_TRADE_ORDER_SEQ); String currval = oracleSequenceMaxValueIncrementer.nextStringValue(); return TimeUtil.getCurrentDateTime14() +bizProduct+ txnType + currval; //20140328175835 100 10 10000002814 共30 位 }
把这个工具类作为一种服务注入
@Autowired public SequenceGenerator sequenceGenerator;
String id =sequenceGenerator.nextRechargeOrderSeq();