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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值