最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle和MySQL中生成32位uuid的方法舉例(國產(chǎn)達(dá)夢同Oracle)

 更新時間:2023年08月19日 09:01:34   作者:@解憂雜貨鋪  
近日遇到朋友問及如何生成UUID,UUID是通用唯一識別碼(Universally Unique Identifier)方法,這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于Oracle和MySQL中生成32位uuid的方法,需要的朋友可以參考下

Oracle 生成多個GUID值

SELECT sys_guid() from dual connect by rownum<10

Oracle中獲取大寫小寫GUID字符串SQL語句

SELECT upper(rawtohex(sys_guid())) GUID from DUAL connect by rownum<10
SELECT lower(rawtohex(sys_guid())) GUID from DUAL connect by rownum<10

代碼層面 (新增時設(shè)置字段自動生成uuid)

twoDeOneMember.setTwoOneRecordUuid(UUID.randomUUID().toString().replaceAll("-","").toUpperCase());
String uId = UUID.randomUUID().toString().replaceAll("-","").toUpperCase();

MySQL中生成UUID

SELECT UUID();
結(jié)果為:0a3eed30-9ad5-11e9-9835-b8ee6591991d
SELECT REPLACE(UUID(), '-', '');
結(jié)果為:eccc72479ad511e99835b8ee6591991d

1、往數(shù)據(jù)庫中新增一條主鍵為UUID的數(shù)據(jù),常用的方式有如下兩種:

insert into stu VALUES(UUID(),'小明');

2、使用java.util類庫中的方法生成UUID,然后通過傳參的方式插入數(shù)據(jù)庫

String uId = UUID.randomUUID().toString().replaceAll("-","");

3、當(dāng)主鍵為自增id,為了獲取新插入數(shù)據(jù)的主鍵id,通常我們在mybatis中是通過如下方式獲取

<insert id="insertStu" parameterType="com.zzl.Stu" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        insert into tb_flyassess_recdlist
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="name != null and name !='' ">name,</if>
            <if test="sex != null ">sex</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="name != null and name !='' ">#{name},</if>
            <if test="sex != null ">#{sex}</if>
        </trim>
</insert>

注意:

useGeneratedKeys只對insert語句生效,默認(rèn)情況下,其值為false,當(dāng)設(shè)置為true時,表示,若是主鍵列為自增列,允許 JDBC 支持自動生成主鍵,并可將自動生成的主鍵返回。keyColumn,keyProperty是聲明主鍵的數(shù)據(jù)庫字段以及java映射字段,也可以忽略,但是useGeneratedKeys = "true"是必須需要寫得。

在上面的代碼中,生成的自增主鍵可以在com.zzl.Stu類中通過其get方法拿到。

除了上述的1、2、3點(diǎn)概述的方法外,還可以通過如下的方法插入UUID或者獲取自增ID,即靈活使用Mybatis提供的selectKey組件。

1、在插入前獲取UUID,并且作為參數(shù)傳入insert語句中:

 <insert id="insert" parameterType="com.zzl.Stu">
        <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.string">
            select uuid()
        </selectKey>
        insert into stu(id,name,sex)
        values
        (#{id},#{name},#{sex})
   </insert>

在selectKey組件中,通過keyProperty來指定insert語句的參數(shù)id;order值有BEFORE/AFTER兩種,當(dāng)order = "BEFORE"時,表示在執(zhí)行insert語句前,執(zhí)行該selectKey,order = "AFTER"則反之;resultType指定selectKey返回類型。

2、在插入后返回最近的自增主鍵

<insert id="insert" parameterType="com.zzl.Stu2" >
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            select LAST_INSERT_ID()
        </selectKey>
        insert into stu2(id,name, sex)
        values
        (#{id},#{name},#{sex})
</insert>

select LAST_INSERT_ID()是將最后插入表中自增id查詢出來,然后賦值給keyProperty定義的字段中,order = "AFTER",表示在insert語句執(zhí)行結(jié)束之后執(zhí)行selectKey語句,resultType定義selectKey的返回值。最后可以通過com.zzl.Stu2類中的get方法獲取到返回的自增id。

另外,對于UUID的處理,除了以上方法,還可以引入AOP切面原理,使其達(dá)到全局處理的目的。如下可以作為一個簡單的參考模式,可以根據(jù)實(shí)際的業(yè)務(wù)邏輯進(jìn)行擴(kuò)展。

package com.zzl.aop;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.UUID;
/**
 * @author zzl
 * @Date 2022/4/11
 * @description
 */
@Aspect
@Component
public class AopTest {
    /**
     *
     * insert開頭的方法
     */
    @Pointcut("execution(* **..insert(..))")
    public void insert() {
    }
    /**
     * 數(shù)據(jù)插入前操作
     *
     * @param joinPoint
     * @throws Exception
     */
    @Before(value = "insert()")
    public void insertBefore(JoinPoint joinPoint) throws Exception {
        Object[] obj = joinPoint.getArgs();
        for (Object argItem : obj) {
            if (BaseEntity.class.isAssignableFrom(argItem.getClass())) {
                Method setId = argItem.getClass().getMethod("setId", String.class);
                setId.invoke(argItem, UUID.randomUUID().toString().replaceAll("-", ""));
            }
        }
    }
}
 

如上代碼中,@Aspect注解修飾該類為切面類,如下的操作將切面類的操作進(jìn)行執(zhí)行。@Component注解是使其切面類能被Spring掃描到,并且將其注冊成為Spring容器中的Bean。@PointCut注解定義一個切點(diǎn),且參數(shù)定義了匹配規(guī)則,唯有滿足對應(yīng)的匹配規(guī)則,該切點(diǎn)才得以執(zhí)行。@Before注解指名了在切點(diǎn)執(zhí)行之前,該執(zhí)行哪些具體的業(yè)務(wù)邏輯,因?yàn)槎x該切面類的初衷是在插入前生成UUID。于是在該切面類中,在判斷insert語句中的參數(shù)實(shí)體類是否是BaseEntity或者其子類(這個步驟就是簡單的進(jìn)行過濾),若滿足條件,則在插入前執(zhí)行set方法,將生成的UUID傳至對應(yīng)的參數(shù)中。

于是,每當(dāng)我們執(zhí)行insert開頭的插入語句,該切面類會起作用,會判斷insert中的實(shí)體類是否是BaseEntity或者其子類,若是,則會自動生成UUID,不需要再對UUID值進(jìn)行手動處理,其靈活性會高很多。

總結(jié)

到此這篇關(guān)于Oracle和MySQL中生成32位uuid的文章就介紹到這了,更多相關(guān)Oracle MySQL生成32位uuid內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • CentOS7編譯安裝MySQL5.7.24的教程詳解

    CentOS7編譯安裝MySQL5.7.24的教程詳解

    這篇文章主要介紹了CentOS7編譯安裝MySQL5.7.24的教程,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-12-12
  • mysql啟用skip-name-resolve模式時出現(xiàn)Warning的處理辦法

    mysql啟用skip-name-resolve模式時出現(xiàn)Warning的處理辦法

    在優(yōu)化MYSQL配置時,加入 skip-name-resolve ,在重新啟動MYSQL時檢查啟動日志,發(fā)現(xiàn)有警告信息
    2012-07-07
  • MySQL安裝starting?the?server失敗的2種解決辦法(推薦!)

    MySQL安裝starting?the?server失敗的2種解決辦法(推薦!)

    MySQL是一個非常強(qiáng)大的關(guān)系型數(shù)據(jù)庫,但有些初學(xué)者在安裝配置的時候,遇到種種的困難,下面這篇文章主要給大家介紹了關(guān)于MySQL安裝starting?the?server失敗的2種解決辦法,需要的朋友可以參考下
    2023-04-04
  • Docker搭建MySQL并掛載數(shù)據(jù)的全過程

    Docker搭建MySQL并掛載數(shù)據(jù)的全過程

    環(huán)境搭建費(fèi)時費(fèi)力,但要必不可少,這篇文章主要給大家介紹了關(guān)于Docker搭建MySQL并掛載數(shù)據(jù)的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01
  • MySQL在不知道列名情況下的注入詳解

    MySQL在不知道列名情況下的注入詳解

    這篇文章主要給大家介紹了關(guān)于MySQL在不知道列名情況下的注入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Mysql匿名登錄無法創(chuàng)建數(shù)據(jù)庫問題解決方案

    Mysql匿名登錄無法創(chuàng)建數(shù)據(jù)庫問題解決方案

    這篇文章主要介紹了Mysql匿名登錄無法創(chuàng)建數(shù)據(jù)庫問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • Mysql聯(lián)表update數(shù)據(jù)的示例詳解

    Mysql聯(lián)表update數(shù)據(jù)的示例詳解

    這篇文章主要介紹了Mysql聯(lián)表update數(shù)據(jù)的示例詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • mysql從執(zhí)行.sql文件時處理\n換行的問題

    mysql從執(zhí)行.sql文件時處理\n換行的問題

    后來注意到,在上面我們恢復(fù)數(shù)據(jù)的時候是在沒有連接數(shù)據(jù)的狀態(tài)下執(zhí)行的。
    2009-05-05
  • MySQL?InnoDB引擎的緩存特性詳解

    MySQL?InnoDB引擎的緩存特性詳解

    這篇文章主要介紹了MySQL?InnoDB引擎的緩存特性詳解的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • node 多種方法連接mysql數(shù)據(jù)庫(最新推薦)

    node 多種方法連接mysql數(shù)據(jù)庫(最新推薦)

    mysql是一個流行的第三方模塊,可以通過npm安裝,在Node.js 中,有多種方法可以連接 MySQL 數(shù)據(jù)庫,本文通過實(shí)例代碼講解node 多種方法連接mysql數(shù)據(jù)庫的示例代碼,感興趣的朋友跟隨小編一起看看吧
    2023-07-07

最新評論

庄河市| 霞浦县| 商洛市| 定远县| 新闻| 奇台县| 平陆县| 井研县| 湟中县| 陆良县| 林西县| 盐城市| 读书| 黎城县| 偃师市| 雅江县| 永城市| 广安市| 高安市| 乌拉特后旗| 周宁县| 永州市| 阳江市| 任丘市| 县级市| 莒南县| 虞城县| 家居| 大足县| 瓦房店市| 怀安县| 陆河县| 泗洪县| 蒙山县| 江都市| 登封市| 青川县| 天祝| 扎赉特旗| 大同市| 中牟县|