亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java通用Mapper UUID簡單示例

2024-07-14 08:43:20
字體:
來源:轉載
供稿:網友

#通用 Mapper UUID 簡單示例

##不可回寫的 UUID

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

@GeneratedValue(generator = "UUID")

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

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

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

##可回寫的 UUID

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

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

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

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

使用 Spring 方式進行配置時如下:

<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 中的類型要和數據庫類型匹配。

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

##通用主鍵 SQL 配置

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

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

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

默認提供的IDENTITY 可選值參考文檔 GenerationType.IDENTITY 。

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

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

在 Java 方式中用下面的方式進行配置:

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

使用 Spring 方式進行配置時如下:

<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>

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

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

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

##小結

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品久久久久电影| 2021久久精品国产99国产精品| 欧美视频一区二区三区…| 黄色成人在线播放| 日韩美女免费线视频| 亚洲伊人久久大香线蕉av| 午夜精品久久久久久久久久久久久| 欧美性极品xxxx做受| 国产专区欧美专区| 亚洲电影免费观看高清完整版在线观看| 日韩欧中文字幕| 久久这里有精品视频| 国产精品国产自产拍高清av水多| 久久国产加勒比精品无码| 国产精品视频白浆免费视频| 亚洲欧美日韩在线高清直播| 久热精品视频在线免费观看| 久热精品视频在线免费观看| 欧美午夜女人视频在线| 97超级碰碰碰| 国产综合在线看| 在线激情影院一区| 亚洲国产古装精品网站| 精品久久久999| 色婷婷av一区二区三区在线观看| 亚洲一区二区三区777| 亚洲电影在线观看| 久久噜噜噜精品国产亚洲综合| 日韩精品中文字幕在线播放| 亚洲一二在线观看| 日本aⅴ大伊香蕉精品视频| 亚洲欧洲午夜一线一品| 久久人人爽人人爽人人片亚洲| 精品国产91久久久| 伊人久久精品视频| 日韩成人在线播放| 中文字幕亚洲二区| 国产精品一区二区三区毛片淫片| 国产精品久久久久久婷婷天堂| 日韩av快播网址| 68精品久久久久久欧美| 亚洲精品91美女久久久久久久| 欧美视频在线观看免费| 日韩中文字幕视频| 日本久久精品视频| 91亚洲精品一区| 亚洲一区中文字幕在线观看| 亚洲综合精品伊人久久| 欧美午夜精品久久久久久人妖| 欧美一级片免费在线| 欧美性xxxx极品hd欧美风情| 国产日韩在线亚洲字幕中文| 欧美黑人极品猛少妇色xxxxx| 亚洲综合中文字幕在线| 久久久噜久噜久久综合| 色多多国产成人永久免费网站| 91久久精品久久国产性色也91| 91精品一区二区| 日韩精品视频免费| 亚洲日本欧美中文幕| 国产日韩欧美电影在线观看| 国产精品一区二区三区免费视频| 亚洲精美色品网站| 日韩电影视频免费| 国产深夜精品福利| 亚洲人成免费电影| 精品国产电影一区| 国模gogo一区二区大胆私拍| 欧美极品xxxx| 一区三区二区视频| 国产精品久久在线观看| 黑人狂躁日本妞一区二区三区| 久久久av网站| 欧美国产第二页| 久久手机精品视频| 日韩精品一区二区三区第95| 91香蕉国产在线观看| 欧洲午夜精品久久久| 国产精品人成电影| 国产精品成人播放| 欧美黑人一区二区三区| 日韩国产在线看| 日本三级久久久| 亚洲欧美国产制服动漫| 亚洲国产精品va| 国产精品69久久| 成人精品视频久久久久| 国产精品自产拍在线观看中文| 日韩高清欧美高清| 欧美激情精品久久久久久大尺度| 久热在线中文字幕色999舞| 精品一区二区三区三区| 国产成人亚洲精品| 91av网站在线播放| 亚洲第一国产精品| 中文欧美在线视频| 久久精品国产亚洲一区二区| 91精品视频在线看| 欧洲美女免费图片一区| 中文字幕欧美精品日韩中文字幕| 91精品久久久久久久久中文字幕| 成人h视频在线观看播放| 国产精品扒开腿做爽爽爽男男| 欧美视频专区一二在线观看| 精品久久久久久久久久国产| 国产美女被下药99| 久久亚洲春色中文字幕| 国产精品久久久一区| 91在线色戒在线| 亚洲视频axxx| 成人免费福利在线| 国产做受69高潮| 午夜精品一区二区三区在线视频| 亚洲美女动态图120秒| 成人深夜直播免费观看| 91精品美女在线| 国产精品久久久久久久久久小说| 国产精品久久久久久久久久久新郎| 色与欲影视天天看综合网| 久久久久久噜噜噜久久久精品| 欧洲亚洲在线视频| 国产精品男人爽免费视频1| 亚洲中国色老太| 久久福利视频网| 一区二区三区天堂av| 欧美激情喷水视频| 在线观看不卡av| 欧美激情精品久久久久久久变态| 久久久久中文字幕| 一本色道久久88综合亚洲精品ⅰ| 97碰碰碰免费色视频| 亚洲精品电影在线观看| 日韩欧美视频一区二区三区| www.精品av.com| 91av在线网站| 久久在精品线影院精品国产| 精品欧美一区二区三区| 欧美与黑人午夜性猛交久久久| 欧美裸身视频免费观看| 色噜噜国产精品视频一区二区| 亚洲剧情一区二区| 亚洲在线视频福利| 亚洲精品视频中文字幕| 亚洲国产精品女人久久久| 国产精品视频一| 这里只有精品久久| 欧美重口另类videos人妖| 5278欧美一区二区三区| 欧美激情乱人伦一区| 国产精品视频久久久久| 亚洲国产精品福利| 黄色精品在线看| 国产欧美最新羞羞视频在线观看| 九九热这里只有在线精品视| 欧美日韩免费在线| 91久久久久久久久久久| 夜夜嗨av一区二区三区四区| 精品久久久久久久久久久久久| 国产美女91呻吟求| 亚洲aⅴ男人的天堂在线观看| 91精品国产自产91精品| 国内精品美女av在线播放| 在线观看欧美www| 69av在线视频|