日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

Mysql表单自增id自定义规则,用LPAD/RPAD就够了

發(fā)布時(shí)間:2023/12/31 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql表单自增id自定义规则,用LPAD/RPAD就够了 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天總結(jié)下我們業(yè)務(wù)經(jīng)常會(huì)用到的一種情況:有時(shí)業(yè)務(wù)的表單單號(hào)都需要用唯一值來(lái)存儲(chǔ)和展示數(shù)據(jù),一般我們可能會(huì)想到生成當(dāng)前系統(tǒng)時(shí)間戳作為單號(hào)內(nèi)容,每行數(shù)據(jù)的insert的時(shí)間都是不一樣的,都需要排隊(duì)一條條執(zhí)行,所以可以用System類的currentTimeMillis方法獲取時(shí)間戳,這種取時(shí)間戳的方式效率最高;而當(dāng)前業(yè)務(wù)需求是想制定比較簡(jiǎn)單的單號(hào)格式,因?yàn)闀r(shí)間戳是一個(gè)數(shù)字串,對(duì)業(yè)務(wù)來(lái)說(shuō)有點(diǎn)亂,而且過(guò)長(zhǎng),不方便閱讀,所以就定制了一種,以固定字符開(kāi)頭+自增數(shù)字,例如:pro1,這里為了考慮問(wèn)題單數(shù)量,這個(gè)數(shù)字我們應(yīng)該要往左邊補(bǔ)0,多補(bǔ)幾位,如pro0000001,那么這種情況下,就可以用到LPAD函數(shù)了。注意這里的前綴pro,我們就需要在java接口中用拼接方法進(jìn)行處理

?一、LPAD函數(shù)介紹

LPAD(str,len,padstr)函數(shù)將字符串padstr填充到str的左側(cè),使字符串的長(zhǎng)度達(dá)到len,然后返回字符串str.如果字符串str的長(zhǎng)度大于len,則返回值被縮短至len字符長(zhǎng)度。而還有一種是在右側(cè)填充,RPAD()函數(shù),用法同理。

例如:

  • select LPAD(10,7,0);? ?//?0000010? ?

  • select LPAD("pro",7,0);? ?//?0000pro

  • select RPAD("pro",7,0);? ?//?pro0000

  • select RPAD(10,7,0);? ?//?1000000? ?

二、業(yè)務(wù)實(shí)現(xiàn)

1.dao層xml中進(jìn)行自增ID獲取并設(shè)置固定位數(shù)

了解完函數(shù)的運(yùn)用情況,接著我們?cè)倏纯慈绾温涞卦撔枨蠊δ堋_@里的單號(hào)可以拆分為兩部分,一部分是前綴,假設(shè)為字符串 pro,后綴則是固定位數(shù)的數(shù)值,自增+1,假設(shè)為 7位數(shù),則第一個(gè)insert數(shù)據(jù)則為 0000001,第二個(gè)則為0000003(自增長(zhǎng)度具體看數(shù)據(jù)庫(kù)設(shè)置,有些是自增步長(zhǎng)為2),那我們的項(xiàng)目是自增步長(zhǎng)為2。那這里有涉及到一個(gè)知識(shí)點(diǎn),獲取自增ID,這里有一篇我之前寫(xiě)的文章,通過(guò)自定義序列表與函數(shù),進(jìn)行調(diào)用函數(shù)取自增ID,我們通過(guò)該方案來(lái)獲取自增ID,然后再結(jié)合LAPD()函數(shù),將自增ID的位數(shù)保持為固定位數(shù),代碼如下:


dao.xml

<select id="getId" resultType="java.lang.String" useCache="false" flushCache="true"SELECT LPAD(SCHEMA.NEXTVAL(),7,0); </select>

?mapper.java

@Repository public interface IGetIdDao{public String getId(); }

?xml中通過(guò)調(diào)用數(shù)據(jù)庫(kù)中的NEXTVAL()自增ID函數(shù),得到當(dāng)前最新的ID值,再進(jìn)行函數(shù)左補(bǔ)齊匹配。接下來(lái)就是在service層中調(diào)用dao層該接口進(jìn)行前綴的拼接處理。有一點(diǎn)需要注意,一般springboot項(xiàng)目中都要開(kāi)啟使用事務(wù),而自增函數(shù)調(diào)用時(shí),因?yàn)槭聞?wù)為提交,無(wú)法取到最新ID值,所以需要設(shè)置兩個(gè)Cache緩存參數(shù)進(jìn)行清除,這樣就可在事務(wù)中取到最新ID需要設(shè)置兩個(gè)Cache緩存參數(shù)進(jìn)行清除,這樣就可在事務(wù)中取到最新IDhttps://blog.csdn.net/studyday1/article/details/126470805?spm=1001.2014.3001.5502這里文章中也有說(shuō)明,可訪問(wèn)了解該機(jī)制。

2.service層調(diào)用接口得到后綴的固定位數(shù)的自增ID值,進(jìn)行拼接

@Autowired private IGetIdDao iGetIdDao;public String getId(){return "pro"+iGetIdDao.getId(); //通過(guò)拼接得出最終業(yè)務(wù)表單所需樣式的單號(hào)數(shù)據(jù) }

?總結(jié):功能基本上涉及到 自增ID、LPAD函數(shù)的運(yùn)用,以及事務(wù)導(dǎo)致的自增ID無(wú)法取到最新值需要設(shè)置清除緩存。

總結(jié)

以上是生活随笔為你收集整理的Mysql表单自增id自定义规则,用LPAD/RPAD就够了的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。