1、生成流水號的工具類
package com.chinairi.mall.util; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.Date; /** * @author gsl * @date 2020-11-30 18:11 */ public class NumberFormatUtil { /** * 根據規則生成流水號 * * @param numberDigit 流水號的位數 * @param numberValue 流水號的值 * @return 流水號的值的字符串信息 */ public static String numberFormat(int numberDigit, int numberValue) { NumberFormat formatter = NumberFormat.getNumberInstance(); formatter.setMinimumIntegerDigits(numberDigit); formatter.setGroupingUsed(false); //日期前綴,這里用的是日期前綴+幾位的流水號 SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); String dateString = date.format(new Date()); return dateString + formatter.format(numberValue); } }
2、調用
//此處生成六位的流水號
String orderId = NumberFormatUtil.numberFormat(6, orderInfoMapper.getOrderNo());
3、DAO層中getOrderNo()方法的SQL
<select id="getOrderNo" resultType="java.lang.Integer">
SELECT IFNULL(MAX(CAST(SUBSTR(ORDER_NO,9,LENGTH(ORDER_NO)) AS UNSIGNED INTEGER)),0) + 1
FROM ORDER_TABLE
</select>
4、可改進的地方
我這里沒有按照每天的流水號更新,第二天不會從0開始算數,值得改進