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类

  1. package com.utils;
  2.  
  3. import java.util.Date;
  4.  
  5. import javax.annotation.Resource;
  6.  
  7. import org.apache.commons.lang3.time.DateFormatUtils;
  8. import org.springframework.transaction.annotation.Propagation;
  9. import org.springframework.transaction.annotation.Transactional;
  10.  
  11. /**
  12. * 序列生成
  13. *
  14. *
  15. */
  16. public class PkGenerator {
  17.  
  18. static final String SEQ_DATA_FORMAT = "yyyyMMdd";
  19.  
  20. @Resource(name = "accountMapper")
  21. private Mapper<?> mapper;
  22.  
  23. /**
  24. * 生成序列
  25. *
  26. * @param seqName 序列名称
  27. * @param prefix 前缀
  28. * @return
  29. */
  30. @Transactional(propagation = Propagation.NOT_SUPPORTED)
  31. public String genPk(String seqName, String prefix) {
  32. return this.genPk(seqName, prefix, 4);
  33. }
  34.  
  35. /**
  36. * 生成序列,长度超过设置长度不会跑出异常
  37. *
  38. * @param seqName 序列名称
  39. * @param prefix 前缀
  40. * @return
  41. */
  42. @Transactional(propagation = Propagation.NOT_SUPPORTED)
  43. public String genPk(String seqName, String prefix, int length) {
  44.  
  45. StringBuilder sb = new StringBuilder(prefix);
  46.  
  47. int seq = 0;
  48. seq = mapper.selectSeq(seqName, 1);
  49.  
  50. String seqstr = getFixedLengthString(String.valueOf(seq), length);
  51. sb.append(DateFormatUtils.format(new Date(), SEQ_DATA_FORMAT)).append(seqstr);
  52.  
  53. return sb.toString().toUpperCase();
  54. }
  55.  
  56. /**
  57. * 生成序列,该序列号不会清零处理,只会进行历史累加</br>
  58. * 长度超过设置长度抛出异常
  59. *
  60. * @param seqName String 序列名称
  61. * @param length int 固定长度
  62. *
  63. * @return
  64. */
  65. @Transactional(propagation = Propagation.NOT_SUPPORTED)
  66. public String genPk2(String seqName, int length) {
  67. StringBuilder sb = new StringBuilder();
  68.  
  69. int seq = 0;
  70. seq = mapper.getSeqNum(seqName, 1);
  71.  
  72. String seqstr = getFixedLengthString(String.valueOf(seq), length);
  73.  
  74. if (seqstr.length() > length)
  75. throw new IllegalArgumentException("序列号长度超过长度限制。");
  76.  
  77. sb.append(seqstr);
  78.  
  79. return seqstr;
  80. }
  81.  
  82. /**
  83. * 生成int类型序列
  84. *
  85. * @param seqName 序列名称
  86. * @return
  87. */
  88. @Transactional(propagation = Propagation.NOT_SUPPORTED)
  89. public int getSeqNum(String seqName) {
  90. return this.getSeqNum(seqName, 1);
  91. }
  92.  
  93. /**
  94. * 生成int类型序列
  95. *
  96. * @param seqName 序列名称
  97. * @return
  98. */
  99. @Transactional(propagation = Propagation.NOT_SUPPORTED)
  100. public int getSeqNum(String seqName, int length) {
  101. return mapper.getSeqNum(seqName, length);
  102. }
  103.  
  104. /**
  105. * 获取固定长度字符串,不足0补,长度超过直接返回
  106. */
  107. public String getFixedLengthString(String raw, int length) {
  108. if (raw == null)
  109. throw new MandoErrorMessageException("raw data is null");
  110.  
  111. int size = raw.length();
  112.  
  113. if (size >= length)
  114. return raw;
  115.  
  116. int fillSize = length - size;
  117.  
  118. return new StringBuilder().append(getLengthZero(fillSize)).append(raw).toString();
  119. }
  120.  
  121. }

第三步:一个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

springMVC使用与生成序列号的更多相关文章

  1. 利用ir.sequence自动生成序列号

    利用ir.sequence自动生成序列号 什么是序列号 可以这么理解,我有一个产品序号,编码的前缀是SOP,后缀是0001~9999的序号,没生成一个产品就自动流水加一,序列号不会重复,odoo中的i ...

  2. SELECT (@i :=@i + 1)生成序列号

    转载自https://blog.csdn.net/qq_27922171/article/details/86477544 同类别自动生成序列号:https://bbs.csdn.net/topics ...

  3. 160920、springmvc上传图片不生成临时文件

    springMVC上传图片时候小于10k不会再临时目录里面生成临时文件,需要增加一个配置 <property name="maxInMemorySize" value=&qu ...

  4. SQL Server 怎样生成序列号(虚拟数字辅助表)

    </pre><pre name="code" class="sql">--生成一个"序列" 或者说生成一个" ...

  5. SpringMVC将url生成二维码图片直接展示在页面上

    利用google的开源包zxing生成二维码 第一步:maven项目的zxing依赖 <!-- google zxing 生成二维码 --> <dependency> < ...

  6. Idea为类生成序列号(十一)

    新建一个测试的实体类Gradle,实现java.io.Serializable接口,选择类名,按Alt+Enter键,出现的提示框中没有生成serialVersionUID的提示,这个需要设置之后才会 ...

  7. 使用Redis的INCR、Hsetnx、Hincrby的命令生成序列号

    Redis INCR命令 用于由一个递增key的整数值.如果该key不存在,它被设置为0执行操作之前.如果key包含了错误类型的值或包含不能被表示为整数,字符串,则返回错误.该操作被限制为64位带符号 ...

  8. springmvc使用swagger生成rest api文档

    pom.xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-s ...

  9. mysql查询结果自动生成序列号

随机推荐

  1. Bean property '**DAO' is not writable or has an invalid setter method

    ApplicationContext.xml中配置有问题,里面的bean的属性名称写错了. ApplicationContext.xml中写的是loginDAO,在java类里配置的bean却写成了l ...

  2. jquery 调用ajax返回json

    ie调用可以,火狐和chrome皆失败,找了半天原因. 被屏蔽了. 火狐和chrome 对同一个域名不同端口的调用也严格限制,不给调用.只能用jsonp. 查看网络的返回状态,错误信息,F12 很重要 ...

  3. OpenCV是什么?

    OpenCV其实就是一对C和C++语言的源代码文件,这些源代码文件中实现了许多常用的计算机视觉算法.例如C借口函数cvCanny()实现了Canny边缘提取算法.可以直接将这些源代码添加到我们自己的项 ...

  4. SqlServer性能优化(一)

    一:数据存储的方式: 1.数据文件:.mdf或.ndf 2.日志文件:.ldf 二:事务日志的工作步骤: 1.数据修改由应用程序发出(在缓冲区进行缓存) 2.数据页位于缓存区缓冲中,或者读入缓冲区缓存 ...

  5. logback配置错误邮件发送

    配置logback发送error级别日志到指定邮箱 需要导入jar包:janino.jar <property name="smtpHost" value="smt ...

  6. Smart210学习记录------nor flash驱动

    nor flash驱动与nand flash驱动的差别不大,只是设置不同的结构体而已,, nor flash驱动代码: #include <linux/module.h> #include ...

  7. Python::OS 模块 -- 进程管理

    os模块的简介参看 Python::OS 模块 -- 简介 os模块的文件相关操作参看 Python::OS 模块 -- 文件和目录操作 os模块的进程参数 Python::OS 模块 -- 进程参数 ...

  8. selenium By.xpath 用法

    搞了一下午... 1.     Xpath往往以“//”开头,属性都是采用@表示,例如//div[@id='_navigation']/div 2.     Firefox有个插件叫做xpather, ...

  9. H5版俄罗斯方块(2)---游戏的基本框架和实现

    前言: 上文中谈到了H5版俄罗斯方块的需求和目标, 这次要实现一个可玩的版本. 但饭要一口一口吃, 很多东西并非一蹴而就. 本文将简单实现一个可玩的俄罗斯方块版本. 下一步会引入AI, 最终采用coc ...

  10. poj1026 Cipher ——置换群

    link:http://poj.org/problem?id=1026 其实这道题目和poj2369这道题目一样. 都是基础的置换群题目.把那道题目理解了,这道题就没问题了. 不过我的方法貌似比较挫, ...