springMVC使用与生成序列号
springMVC使用与生成序列号
我是以springMVC的方式提供序列号
代码可以直接在项目中用
第一步:controller类
1 @Autowired 2 private PkGenerator pkGenerator; 3 private static final String SEQ_PRIFIX = "DF"; 4 private static final String SEQ_PRIFIX1 = "DM"; 5 6 private static final String SEQ_NAME = "PAYMENT"; 7 protected String genPk(string type) { 8 9 if (type == "type1" || type == "type2") { 10 return pkGenerator.genPk(SEQ_NAME, SEQ_DF_PRIFIX + preReleaseFlag); 11 } else { 12 return pkGenerator.genPk(SEQ_NAME, SEQ_PRIFIX1 + preReleaseFlag); 13 } 14 }
第二步:PkGenerator类
package com.utils; import java.util.Date; import javax.annotation.Resource; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** * 序列生成 * * */ public class PkGenerator { static final String SEQ_DATA_FORMAT = "yyyyMMdd"; @Resource(name = "accountMapper") private Mapper<?> mapper; /** * 生成序列 * * @param seqName 序列名称 * @param prefix 前缀 * @return */ @Transactional(propagation = Propagation.NOT_SUPPORTED) public String genPk(String seqName, String prefix) { return this.genPk(seqName, prefix, 4); } /** * 生成序列,长度超过设置长度不会跑出异常 * * @param seqName 序列名称 * @param prefix 前缀 * @return */ @Transactional(propagation = Propagation.NOT_SUPPORTED) public String genPk(String seqName, String prefix, int length) { StringBuilder sb = new StringBuilder(prefix); int seq = 0; seq = mapper.selectSeq(seqName, 1); String seqstr = getFixedLengthString(String.valueOf(seq), length); sb.append(DateFormatUtils.format(new Date(), SEQ_DATA_FORMAT)).append(seqstr); return sb.toString().toUpperCase(); } /** * 生成序列,该序列号不会清零处理,只会进行历史累加</br> * 长度超过设置长度抛出异常 * * @param seqName String 序列名称 * @param length int 固定长度 * * @return */ @Transactional(propagation = Propagation.NOT_SUPPORTED) public String genPk2(String seqName, int length) { StringBuilder sb = new StringBuilder(); int seq = 0; seq = mapper.getSeqNum(seqName, 1); String seqstr = getFixedLengthString(String.valueOf(seq), length); if (seqstr.length() > length) throw new IllegalArgumentException("序列号长度超过长度限制。"); sb.append(seqstr); return seqstr; } /** * 生成int类型序列 * * @param seqName 序列名称 * @return */ @Transactional(propagation = Propagation.NOT_SUPPORTED) public int getSeqNum(String seqName) { return this.getSeqNum(seqName, 1); } /** * 生成int类型序列 * * @param seqName 序列名称 * @return */ @Transactional(propagation = Propagation.NOT_SUPPORTED) public int getSeqNum(String seqName, int length) { return mapper.getSeqNum(seqName, length); } /** * 获取固定长度字符串,不足0补,长度超过直接返回 */ public String getFixedLengthString(String raw, int length) { if (raw == null) throw new MandoErrorMessageException("raw data is null"); int size = raw.length(); if (size >= length) return raw; int fillSize = length - size; return new StringBuilder().append(getLengthZero(fillSize)).append(raw).toString(); } }
第三步:一个Mapper类
1 @Select("call nextval(#{name},#{length})") 2 int selectSeq(@Param("name") String name, @Param("length") int length); 3 4 @Select("call nextval_all(#{name},#{length})") 5 int getSeqNum(@Param("name") String name, @Param("length") int length);
第四部:PkGenerator 加到service.xml中
1 <bean class="com.zhonglian.jinjumng.utils.PkGenerator" />
就这样简单,成功的在一个项目中调用这个序列了。
代码可以直接上测试。
偶遇晨光原创
2016-02-29
本文来自博客园,作者:青城杂文录,转载请注明原文链接:https://www.cnblogs.com/chenyq/p/5227795.html