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

 

posted @ 2016-02-29 16:05  青城杂文录  阅读(1917)  评论(0编辑  收藏  举报