欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)文章

  • mysql刪除操作其實(shí)是假刪除問題

    mysql刪除操作其實(shí)是假刪除問題

    這篇文章主要介紹了mysql刪除操作其實(shí)是假刪除問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • mysql explain的用法(使用explain優(yōu)化查詢語句)

    mysql explain的用法(使用explain優(yōu)化查詢語句)

    mysql explain可以幫助你檢查索引和更好的優(yōu)化查詢語句,今天特地學(xué)習(xí)了下mysql explain的用法,需要的朋友可以參考下
    2017-01-01
  • Mysql常用運(yùn)算符與函數(shù)匯總

    Mysql常用運(yùn)算符與函數(shù)匯總

    本文給大家匯總介紹了mysql中的常用的運(yùn)算符以及常用函數(shù)的用法及示例,非常的全面,有需要的小伙伴可以參考下
    2017-09-09
  • mysql主從復(fù)制讀寫分離的配置方法詳解

    mysql主從復(fù)制讀寫分離的配置方法詳解

    一般來說mysql都是通過 主從復(fù)制(Master-Slave)的方式來同步數(shù)據(jù),再通過讀寫分離(MySQL-Proxy)來提升數(shù)據(jù)庫的并發(fā)負(fù)載能力 這樣的方案來進(jìn)行部署與實(shí)施的。
    2018-04-04
  • MySQL高效導(dǎo)入多個.sql文件方法詳解

    MySQL高效導(dǎo)入多個.sql文件方法詳解

    MySQL有多種方法導(dǎo)入多個.sql文件,常用的有兩個命令:mysql和source,如何提高導(dǎo)入速度,在導(dǎo)入大的sql文件時,建議使用mysql命令
    2018-10-10
  • MySQL子查詢與HAVING/SELECT的結(jié)合使用

    MySQL子查詢與HAVING/SELECT的結(jié)合使用

    這篇文章主要介紹了MySQL子查詢在HAVING/SELECT字句中使用、及相關(guān)子查詢和WITH/EXISTS字句的使用,具有一定的參考價值,感興趣的可以了解一下
    2023-06-06
  • Navicat連接MySQL8.0的正確方法(親測有效)

    Navicat連接MySQL8.0的正確方法(親測有效)

    navicat是一款非常強(qiáng)大的數(shù)據(jù)庫可視化操作軟件,程序開發(fā)中經(jīng)常會用到navicat,下面這篇文章主要給大家介紹了關(guān)于Navicat連接MySQL8.0的正確方法,需要的朋友可以參考下
    2022-06-06
  • 在MySQL中使用通配符時應(yīng)該注意的問題

    在MySQL中使用通配符時應(yīng)該注意的問題

    這篇文章主要介紹了在MySQL中使用通配符時應(yīng)該注意的問題,主要是下劃線的使用容易引起的錯誤,需要的朋友可以參考下
    2015-05-05
  • MySQL中使用去重distinct方法的示例詳解

    MySQL中使用去重distinct方法的示例詳解

    這篇文章主要介紹了MySQL中使用去重distinct方法的示例詳解。distinct用來查詢不重復(fù)記錄的條數(shù),distinct表示對后面的所有參數(shù)的拼接取 不重復(fù)的記錄,即查出的參數(shù)拼接每行記錄都是唯一的。地產(chǎn)感興趣的可以了解一下
    2020-07-07
  • 利用rpm安裝mysql 5.6版本詳解

    利用rpm安裝mysql 5.6版本詳解

    眾所周知MySQL在很多領(lǐng)域都被廣泛的使用,尤其是很多互聯(lián)網(wǎng)企業(yè),諸如騰訊,阿里等等。那么本文將主要介紹如何通過rpm方式來安裝Mysql,這是比較簡單的一種安裝方式,文中介紹的很詳細(xì),相信對于大家安裝mysql具有一定的參考借鑒價值,下面來一起看看吧。
    2016-11-11

最新評論