• 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

    爱生活,更爱给我带来生活的人
  • 相关阅读:
    Unity编译Android的原理解析和apk打包分析
    TokuDB性能测试报告
    一起脱去小程序的外套和内衣
    go单元测试进阶篇
    小程序发布后最全解析!
    部署在腾讯云的公益网站遭受了一次CC攻击
    基于Http原理实现Android的图片上传和表单提交
    腾讯云TCCE培训认证 精彩的第一次
    【腾讯云的1001种玩法】在腾讯云上创建您的SQL Cluster(5)
    腾讯云容器服务的滚动升级使用简介
  • 原文地址:https://www.cnblogs.com/chenyq/p/5227795.html
Copyright © 2020-2023  润新知