简单流水号生成

  项目中有这样的需求:每天从00001开始生成5位的流水号,比如2012年9月16日,00001、00002、......99999,到2012年9月17日,又从00001开始。而且系统重启后依然需要保持流水性,重启前是00012,那么重启后需要从00013开始。

  选择的一个方案就是将流水号保存到数据库。

  1、流水号实体

/**

 * 流水号

 * @author Luxh

 * 2012-9-16

 */

public class SerialNumber {

    

    

    private String id;

    

    /**

     * 流水号

     */

    private Integer serialNo;

    

    /**

     * 生成日期(格式:yyyyMMdd)

     */

    private String generateDate;

    

    //getter/setter方法

    //...

}

  2、流水号实体对应的数据表

简单流水号生成

  3、生成流水号的程序

/**

     * 生成流水号

     * @return

     */

    public String generateSerialNumber() {

        //当天的初始化流水号为1

        Integer serialNo = 1;

        //查询当天的下一个流水号

        String hql = "SELECT max(t.serialNo+1) FROM SerialNumber t WHERE t.generateDate=?";

        

        String generateDate = DateUtils.formatDate(new Date(), "yyyyMMdd");

        Object obj = session.createQuery(hql).setParameter(0, generateDate).uniqueResult();

        if(obj != null) {

            serialNo = (Integer) obj;

        }

        

        //将当前序列号保存到数据库

        SerialNumber sn = new SerialNumber();

        sn.setSerialNo(serialNo);

        sn.setGenerateDate(generateDate);

        session.save(sn);

        

        //将流水号格式化为 "00001"  5位长度返回

        return String.format("%05d", serialNo);

    }

 

 

 

 

 

 

 

  

你可能感兴趣的:(生成)