springMVC使用与生成序列号

我是以springMVC的方式提供序列号

代码可以直接在项目中用

第一步:controller类

 @Autowired
private PkGenerator pkGenerator;
private static final String SEQ_PRIFIX = "DF";
private static final String SEQ_PRIFIX1 = "DM"; private static final String SEQ_NAME = "PAYMENT";
protected String genPk(string type) { if (type == "type1" || type == "type2") {
return pkGenerator.genPk(SEQ_NAME, SEQ_DF_PRIFIX + preReleaseFlag);
} else {
return pkGenerator.genPk(SEQ_NAME, SEQ_PRIFIX1 + preReleaseFlag);
}
}

第二步: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类

     @Select("call nextval(#{name},#{length})")
int selectSeq(@Param("name") String name, @Param("length") int length); @Select("call nextval_all(#{name},#{length})")
int getSeqNum(@Param("name") String name, @Param("length") int length);

第四部:PkGenerator  加到service.xml中

     <bean class="com.zhonglian.jinjumng.utils.PkGenerator" />

就这样简单,成功的在一个项目中调用这个序列了。

代码可以直接上测试。

偶遇晨光原创

2016-02-29

最新文章

  1. EntityFramework之你不知道的那些事(七)
  2. Android自动化学习笔记:编写MonkeyRunner脚本的几种方式
  3. zmqsend for FFmpeg
  4. CentOS 6.4安装lnmp环境
  5. c&amp; c++ enum
  6. iOS iTunes文件共享
  7. linux服务端的网络编程
  8. BNUOJ34973Liserious战队
  9. Django中使用Bootstrap
  10. 第三方登录,一般都是遵循OAuth2.0协议。
  11. C# 集合已修改 可能无法执行枚举操作 zz
  12. vue嵌套路由
  13. Django1.11加载静态文件
  14. kafka eagel的使用
  15. tf.range()函数
  16. ios中radiobutton
  17. 安装corel x8提示你已安装了另外一个版本
  18. 如何正确的把 Java 数组 Array 转为列表 List
  19. HAproxy simple
  20. iview使用vue-i18n实现国际化

热门文章

  1. 初学者SQL语句介绍
  2. myawr : mysql性能监控
  3. Eclipse for php + Xdebug搭建PHP的调试环境
  4. Fragment的初步设计
  5. HTMl5-canvas 入门级复习
  6. async 函数学习笔记
  7. C#中动态读写App.config配置文件
  8. Android——使用SQLiteDatabase操作SQLite数据库
  9. Discovering the Computer Science Behind Postgres Indexes
  10. 获取 .net framework 路径