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

Java通用Mapper UUID簡單示例

 更新時間:2018年12月25日 08:56:24   作者:isea533  
今天小編就為大家分享一篇關(guān)于Java通用Mapper UUID簡單示例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

#通用 Mapper UUID 簡單示例

##不可回寫的 UUID

通用 Mapper 中對 UUID 的用法主要提到了一種專有的寫法,如下寫法:

@GeneratedValue(generator = "UUID")

這種方式實現(xiàn)很容易理解,就是在你 insert 之前,調(diào)用 UUID 的公共方法在<bind> 標(biāo)簽中生成了一個值,插入到了數(shù)據(jù)庫,由于這個值是臨時的,并沒有set到對象,因此這種方式是不支持回寫的。

由于回寫方式很常見,因此用這種方式很難滿足要求。

而且在文檔中也提到了一種可以回寫的方式,由于沒有提供例子,導(dǎo)致很多人不理解或者嘗試失敗,因此很早就有必要寫一篇如何使用可回寫 UUID 的方式(我曾經(jīng)遠(yuǎn)程協(xié)助一個朋友解決過這個問題,這個朋友答應(yīng)我把自己的用法寫下來分享給大家,可惜食言了)。

##可回寫的 UUID

最簡單的可回寫 UUID 方式就是像 Oracle 序列那樣直接寫一個返回 UUID 的 SQL 就能實現(xiàn),這是第一種寫法:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "select uuid()")
private String id;

使用這種方式的時候必須注意,由于是執(zhí)行 SQL,所以底層是使用<selectKey> 實現(xiàn)的,并且因為需要先得到 UUID 的值才能插入數(shù)據(jù)庫,因此還需要配置ORDER屬性,使用 Java 方式配置時,用下面的方式進(jìn)行配置:

Config config = new Config();
// 其他配置
// 主鍵自增回寫方法執(zhí)行順序,默認(rèn)AFTER,可選值為(BEFORE|AFTER)
config.setOrder("BEFORE");
mapperHelper.setConfig(config);

使用 Spring 方式進(jìn)行配置時如下:

<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="com.isea533.mybatis.mapper"/>
  <property name="properties">
    <value>
      mappers=tk.mybatis.mapper.common.Mapper
      ORDER=BEFORE
    </value>
  </property>
</bean>

注意是增加ORDER=BEFORE這一行,如果你還有其他配置,都可以按這種方式一行一個key=value。

這么配置以后就可以正確的獲取 UUID 的值了。

##任意類型的主鍵回寫值

你可能沒注意到上面 UUID 類型的主鍵中,id 屬性的類型是String,因為select uuid() 返回的字符串,所以 Java 中的類型要和數(shù)據(jù)庫類型匹配。

因此,如果你使用一個select myId() 函數(shù)返回一個自定義類型的主鍵值,你需要讓 Java 中的類型和這個匹配。

##通用主鍵 SQL 配置

如果你每一個實體類中都有一個id 屬性,并且配置的注解都一樣,都執(zhí)行同樣的 SQL 去返回值。如果都去配置這個注解會很麻煩。想要解決這種重復(fù)性配置,最簡單的方式就是提取基類,讓使用相同方式主鍵策略的實體類繼承同一個基類就能解決。

解決方案看這里: https://github.com/guozilanTK/base/tree/master/base-id

但是如果你需要適用不同的數(shù)據(jù)庫,這種方式麻煩點的解決辦法就是針對不同的數(shù)據(jù)庫創(chuàng)建不同的基類,放在不同的項目中,但是使用相同的包名,具體應(yīng)用到生產(chǎn)環(huán)境時使用對應(yīng)數(shù)據(jù)庫的基類 jar 包就可以。除此之外還有一種方式,這種方式就是使用 IDENTITY,這個參數(shù)用于配置取回主鍵的方式。

默認(rèn)提供的IDENTITY 可選值參考文檔 GenerationType.IDENTITY 。

這個參數(shù)除了這些可選值外,還可以是可以執(zhí)行的 SQL,也就是說最前面的配置方式可以改為:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;

在 Java 方式中用下面的方式進(jìn)行配置:

Config config = new Config();
// 其他配置
config.setIDENTITY("select uuid()");
// 主鍵自增回寫方法執(zhí)行順序,默認(rèn)AFTER,可選值為(BEFORE|AFTER)
config.setOrder("BEFORE");
mapperHelper.setConfig(config);

使用 Spring 方式進(jìn)行配置時如下:

<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="com.isea533.mybatis.mapper"/>
  <property name="properties">
    <value>
      mappers=tk.mybatis.mapper.common.Mapper
      IDENTITY=select uuid()
      ORDER=BEFORE
    </value>
  </property>
</bean>

這里仍然要注意設(shè)置ORDER=BEFORE,如果你用IDENTITY 提供的那些可選參數(shù),就不要設(shè)置(默認(rèn)為AFTER),可選參數(shù)中仍然是針對的數(shù)據(jù)庫支持自增的情況,那些情況仍然是插入數(shù)據(jù)庫后才會有主鍵值,這點一定要明白!

在這種情況下,如果換了數(shù)據(jù)庫,只需要修改一下配置就能解決,例如 SQL SERVER 的:

IDENTITY=select replace(newid(), '-', '')

##小結(jié)

關(guān)于 UUID 的內(nèi)容就上面這些,還需要提醒一點的就是由于ORDER是一個全局的配置,所以使用時要注意保證所有主鍵方式都是一致的ORDER方式,主鍵自增的時候使用@GeneratedValue(generator = "JDBC") 這種方式通過 JDBC 接口去獲取返回值更好。當(dāng)然使用批量插入時,MySql 支持多主鍵回寫,但是 SqlServer 僅能返回最后一個插入的主鍵,所以選擇使用某種方式時,一定要有所了解,做好測試,避免數(shù)據(jù)庫差異帶來的問題。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • 如何使用Spring+redis實現(xiàn)對session的分布式管理

    如何使用Spring+redis實現(xiàn)對session的分布式管理

    本篇文章主要介紹了如何使用Spring+redis實現(xiàn)對session的分布式管理,本文主要是在Spring中實現(xiàn)分布式session,采用redis對session進(jìn)行持久化管理,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Java動態(tài)代理的兩種實現(xiàn)方式詳解【附相關(guān)jar文件下載】

    Java動態(tài)代理的兩種實現(xiàn)方式詳解【附相關(guān)jar文件下載】

    這篇文章主要介紹了Java動態(tài)代理的兩種實現(xiàn)方式,結(jié)合實例形式分析了java動態(tài)代理的相關(guān)原理、實現(xiàn)方法與操作技巧,并附帶相關(guān)jar文件供讀者下載,需要的朋友可以參考下
    2019-03-03
  • Spring?Boot集成Milvus快速入門demo示例詳解

    Spring?Boot集成Milvus快速入門demo示例詳解

    Milvus是一種高性能向量數(shù)據(jù)庫,支持從筆記本到大型分布式系統(tǒng)的多環(huán)境運行,它以開源和云服務(wù)形式提供,是LFAI & Data Foundation的項目,采用Apache 2.0許可,Milvus特別支持高并行化和解耦的系統(tǒng)架構(gòu),使其能夠隨數(shù)據(jù)增長而擴展,支持各種復(fù)雜搜索功能,滿足企業(yè)級AI應(yīng)用需求
    2024-09-09
  • Java對文件進(jìn)行基本操作案例講解

    Java對文件進(jìn)行基本操作案例講解

    這篇文章主要介紹了Java對文件進(jìn)行基本操作案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是本文的詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • SpringBoot實現(xiàn)過濾器攔截器的耗時對比

    SpringBoot實現(xiàn)過濾器攔截器的耗時對比

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實現(xiàn)過濾器攔截器的輸出接口耗時對比,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-06-06
  • 獲取JPEGImageEncoder和JPEGCode這兩個類的方法

    獲取JPEGImageEncoder和JPEGCode這兩個類的方法

    下面小編就為大家?guī)硪黄@取JPEGImageEncoder和JPEGCode這兩個類的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • mybatis-plus雪花算法自動生成機器id原理及源碼

    mybatis-plus雪花算法自動生成機器id原理及源碼

    Mybatis-Plus是一個Mybatis的增強工具,它在Mybatis的基礎(chǔ)上做了增強,卻不做改變,Mybatis-Plus是為簡化開發(fā)、提高開發(fā)效率而生,但它也提供了一些很有意思的插件,比如SQL性能監(jiān)控、樂觀鎖、執(zhí)行分析等,下面一起看看mybatis-plus雪花算法自動生成機器id原理解析
    2021-06-06
  • Java實現(xiàn)Kafka生產(chǎn)者和消費者的示例

    Java實現(xiàn)Kafka生產(chǎn)者和消費者的示例

    這篇文章主要介紹了Java實現(xiàn)Kafka生產(chǎn)者和消費者的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Java中Calendar時間操作常用方法詳解

    Java中Calendar時間操作常用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java中Calendar時間操作常用方法,calendar中set方法和靜態(tài)屬性帶來的一些坑,感興趣的小伙伴們可以參考一下
    2016-05-05
  • mybatis映射內(nèi)部類的使用及注意事項說明

    mybatis映射內(nèi)部類的使用及注意事項說明

    這篇文章主要介紹了mybatis映射內(nèi)部類的使用及注意事項說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論

邯郸市| 江城| 漯河市| 大田县| 泰来县| 大邑县| 夏邑县| 望谟县| 丰台区| 光泽县| 莱阳市| 海丰县| 平陆县| 荥阳市| 太康县| 漯河市| 来宾市| 长沙市| 凤台县| 鲁山县| 塔河县| 古浪县| 壤塘县| 荣成市| 襄汾县| 天全县| 额尔古纳市| 浑源县| 西乌珠穆沁旗| 盐亭县| 沁阳市| 四子王旗| 隆昌县| 新河县| 彭州市| 科技| 崇左市| 南开区| 宁波市| 沈丘县| 汉阴县|