MySQL函数生成【日期+补零+自增数】的数据编号

本文介绍了如何在MySQL中创建一个自增编号表用于生成订单号和产品号,并展示了一个获取自增编号的MySQL函数,该函数接受业务名称、时间格式和序列长度作为参数,返回格式化的编号。在Mybatis中,通过Mapper接口和XML配置调用此函数,实现了动态生成订单号。示例代码展示了如何在Java中调用Mapper方法获取订单号。
摘要由CSDN通过智能技术生成
  • 首先应该创建一个自增号码的表,建表数据如下:
CREATE TABLE `sequence` (
      `name` varchar(20) NOT NULL,
      `value` int(10) unsigned NOT NULL,
      PRIMARY KEY (`name`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=''自增编号生成本表'';

其中两个字段的含义:
name:代表的自增的业务名称,需要生成编号的可能是 order_number(订单编号)或者是goods_number(产品编号);
value:记录当前编号已经自增的值,从0开始,每次生成 +1。

  • 表格详情如下:
namevalue
order_number0
goods_number0
  • 开始创建MySQL函数
BEGIN
   DECLARE getval VARCHAR(24) DEFAULT '''';
     UPDATE sequence SET value= last_insert_id(value+1)  WHERE name=seq_name;
    SET  getval =  (SELECT CONCAT(IFNULL(DATE_FORMAT(NOW(), time_type),''''), LPAD((last_insert_id()+""), seq_length, ''0'')));
    RETURN  getval;
END

这是一个获取名称为getval()的MySQL函数,执行时首先修改sequence表中为‘seq_name’的value值,然后执行查询获取最终的编号。其中包括三个参数需要传入:
seq_name:这个参数对应的就是sequence表中的name字段,表示要获取哪个业务对应的编号,可以传入例如 ‘order_number’;
time_type:这个参数表示的是对应生成的时间格式,可以传入‘yyyy-MM-dd’;
seq_length:这个参数指的是在时间后还有几位,比如可以传入4,那么时间后就会生成‘0001’四位,按介绍参数传入参数执行函数,那么最后生成的编号为【202001140001】

  • 项目中应该如何使用该函数(以Mybatis为例)
//Mybatis对应Mapper的Java代码写下方法:
String getWorksheetId(@Param("name") String name, @Param("sqlLength") Integer sqlLength, @Param("typeTime") String typeTime);
<!-- Mybatis对应的XMl文件中如下写法:-->
<select id="getWorksheetId" resultType="java.lang.String">
   SELECT getWorksheetId(#{name}, #{sqlLength}, #{typeTime}) FROM dual
</select>

dual:指的是MySQL的虚拟表,没有什么特殊意义,具体解释可以百度搜下,这里就不详细介绍了。

  • 最后在Java代码中调用该方法就可以实现了:
String orderNumber = SequenceMapper.getWorksheetId("order_number", 4, "yyyy-MM");
  • 最终返回的结果为(时间为文章创建日期,不必纠结):“202001140001”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值