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

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. hive的Query和Insert,Group by,Aggregations(聚合)操作

    1.Query (1)分区查询 在查询的过程中,采用那个分区来查询是通过系统自动的决定,但是必须是在分区列上基于where子查询. SELECT page_views.* FROM page_view ...

  2. 数据库连接JDBC和数据库连接池C3P0自定义的java封装类

    数据库连接JDBC和数据库连接池C3P0自定义的java封装类 使用以下的包装类都需要自己有JDBC的驱动jar包: 如 mysql-connector-java-5.1.26-bin.jar(5.1 ...

  3. (spring-第17回【AOP基础篇】) 创建增强类

    一.   增强类包含的信息: a)   横切逻辑(插入的具体代码) b)   部分连接点信息(在方法的哪个位置插入代码,比如方法前.方法后等). 二.   增强的类型 每一种增强有一个需要实现的增强类 ...

  4. 更新包地址安装新版node.js

    # apt-get update # apt-get install -y python-software-properties software-properties-common # add-ap ...

  5. 【转】LokiJS:纯JavaScript实现的轻量级数据库

    原文转自:http://www.html5cn.org/article-7091-1.html LokiJS一个轻量级的面向文档的数据库,由JavaScript实现,性能高于一切.目的是把JavaSc ...

  6. 转 TextBox的EnableViewState属性问题

    问题如下: ---------------------------------------------------------------------------------------------- ...

  7. Node.js高级编程读书笔记 - 2 文件和进程处理

    Outline 3 文件.进程.流和网络 3.1 查询和读写文件 3.2 创建和控制外部进程 3.3 读写数据流 3 文件.进程.流和网络 3.1 查询和读写文件 path 从Node 0.8起,pa ...

  8. 史上最详细Windows版本搭建安装React Native环境配置 转载,比官网的靠谱亲测可用

    史上最详细Windows版本搭建安装React Native环境配置   2016/01/29 |  React Native技术文章 |  Sky丶清|  95条评论 |  33530 views ...

  9. [debian]SublimeText>PrettyCode無效

    怣 apt-get install node http://nodejs.org/#download.

  10. 最短路径问题——dijkstra算法

    仅谈谈个人对dijkstra的理解,dijkstra算法是基于邻接表实现的,用于处理单源最短路径问题(顺便再提一下,处理单源最短路径问题的还有bellman算法).开辟一个结构体,其变量为边的终点和边 ...