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

Java通用Mapper UUID簡(jiǎn)單示例

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

#通用 Mapper UUID 簡(jiǎn)單示例

##不可回寫(xiě)的 UUID

通用 Mapper 中對(duì) UUID 的用法主要提到了一種專有的寫(xiě)法,如下寫(xiě)法:

@GeneratedValue(generator = "UUID")

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

由于回寫(xiě)方式很常見(jiàn),因此用這種方式很難滿足要求。

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

##可回寫(xiě)的 UUID

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

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

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

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

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

<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這一行,如果你還有其他配置,都可以按這種方式一行一個(gè)key=value

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

##任意類型的主鍵回寫(xiě)值

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

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

##通用主鍵 SQL 配置

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

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

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

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

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

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

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

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

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

<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ù)中仍然是針對(duì)的數(shù)據(jù)庫(kù)支持自增的情況,那些情況仍然是插入數(shù)據(jù)庫(kù)后才會(huì)有主鍵值,這點(diǎn)一定要明白!

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

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

##小結(jié)

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

總結(jié)

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

相關(guān)文章

  • springboot自動(dòng)掃描添加的BeanDefinition源碼實(shí)例詳解

    springboot自動(dòng)掃描添加的BeanDefinition源碼實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于springboot自動(dòng)掃描添加的BeanDefinition的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比

    Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比

    這篇文章主要介紹了Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 使用Java反射模擬實(shí)現(xiàn)Spring的IoC容器的操作

    使用Java反射模擬實(shí)現(xiàn)Spring的IoC容器的操作

    這篇文章主要介紹了使用Java反射模擬實(shí)現(xiàn)Spring的IoC容器的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Netty中的心跳檢測(cè)機(jī)制詳解

    Netty中的心跳檢測(cè)機(jī)制詳解

    這篇文章主要介紹了Netty中的心跳檢測(cè)機(jī)制詳解,Netty 是 基于 TCP 協(xié)議開(kāi)發(fā)的,在四層協(xié)議 TCP 協(xié)議的實(shí)現(xiàn)中也提供了 keepalive 報(bào)文用來(lái)探測(cè)對(duì)端是否可用,TCP 層將在定時(shí)時(shí)間到后發(fā)送相應(yīng)的 KeepAlive 探針以確定連接可用性,需要的朋友可以參考下
    2023-12-12
  • 關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說(shuō)明

    關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說(shuō)明

    這篇文章主要介紹了關(guān)于jdk9、jdk10、jdk11、jdk12、jdk13新特性說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • MySQL+SSM+Ajax上傳圖片問(wèn)題

    MySQL+SSM+Ajax上傳圖片問(wèn)題

    本文主要介紹了MySQL+SSM+Ajax上傳圖片問(wèn)題。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • Gradle:修改默認(rèn)的Build配置文件名方式

    Gradle:修改默認(rèn)的Build配置文件名方式

    這篇文章主要介紹了Gradle:修改默認(rèn)的Build配置文件名方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • springboot整合消息隊(duì)列RabbitMQ

    springboot整合消息隊(duì)列RabbitMQ

    這篇文章主要介紹了springboot整合消息隊(duì)列RabbitMQ,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • 連續(xù)調(diào)用多個(gè)外部系統(tǒng)寫(xiě)接口保證數(shù)據(jù)一致性的思路

    連續(xù)調(diào)用多個(gè)外部系統(tǒng)寫(xiě)接口保證數(shù)據(jù)一致性的思路

    今天小編就為大家分享一篇關(guān)于連續(xù)調(diào)用多個(gè)外部系統(tǒng)寫(xiě)接口保證數(shù)據(jù)一致性的思路,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • Spring關(guān)閉Tomcat Servlet容器時(shí)內(nèi)存泄漏問(wèn)題解決方案

    Spring關(guān)閉Tomcat Servlet容器時(shí)內(nèi)存泄漏問(wèn)題解決方案

    這篇文章主要介紹了Spring關(guān)閉Tomcat Servlet容器時(shí)內(nèi)存泄漏問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10

最新評(píng)論