国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何使用ORM鏈式操作?如何優雅的實現軟刪除?

開發 前端
如果關聯查詢的幾個表都啟用了軟刪除特性時,會發生以下這種情況,即條件語句中會增加所有相關表的軟刪除時間判斷。

本期重點

會帶大家完成【電商實戰項目】的輪播圖刪除功能,用到的知識點包括:

  • ORM鏈式操作
  • 如何優雅的進行時間維護
  • 軟刪除和物理刪除的區別
  • 如何優雅的實現軟刪除
  • 結合商業項目需求,有哪些容易踩的坑?

ORM鏈式操作-時間維護

需要注意,該特性僅對鏈式操作有效。

gdb模塊支持對數據記錄的寫入、更新、刪除時間自動填充,提高開發維護效率。為了便于時間字段名稱、類型的統一維護,如果使用該特性,我們約定:

  • 字段應當設置允許值為null。
  • 字段的類型必須為時間類型,如:date?,  datetime?,  timestamp?。不支持數字類型字段,如int。
  • 字段的名稱不支持自定義設置,并且固定名稱約定為:

created_at用于保存記錄的創建時間,僅會寫入一次。

updated_at用于保存記錄的修改時間,每次記錄變更時更新。

deleted_at用于保存記錄的軟刪除特性,只有當記錄刪除時會寫入一次。

字段名稱其實不區分大小寫,也會忽略特殊字符,例如CreatedAt?,  UpdatedAt?,  DeletedAt?也是支持的。此外,時間字段名稱可以通過配置文件進行自定義修改,并可使用TimeMaintainDisabled配置完整關閉該特性,具體請參考 ORM使用配置 章節。

對時間類型的固定其實是為了形成一種規范。

特性的啟用

當數據表包含created_at、updated_at、deleted_at任意一個或多個字段時,該特性自動啟用。

以下的示例中,我們默認示例中的數據表均包含了這3個字段。

?created_at??寫入時間

在執行Insert/InsertIgnore/BatchInsert/BatchInsertIgnore方法時自動寫入該時間,隨后保持不變。

// INSERT INTO `user`(`name`,`created_at`,`updated_at`) VALUES('john', `2020-06-06 21:00:00`, `2020-06-06 21:00:00`)
g.Model("user").Data(g.Map{"name": "john"}).Insert()

// INSERT IGNORE INTO `user`(`uid`,`name`,`created_at`,`updated_at`) VALUES(10000,'john', `2020-06-06 21:00:00`, `2020-06-06 21:00:00`)
g.Model("user").Data(g.Map{"uid": 10000, "name": "john"}).InsertIgnore()

// REPLACE INTO `user`(`uid`,`name`,`created_at`,`updated_at`) VALUES(10000,'john', `2020-06-06 21:00:00`, `2020-06-06 21:00:00`)
g.Model("user").Data(g.Map{"uid": 10000, "name": "john"}).Replace()

// INSERT INTO `user`(`uid`,`name`,`created_at`,`updated_at`) VALUES(10001,'john', `2020-06-06 21:00:00`, `2020-06-06 21:00:00`) ON DUPLICATE KEY UPDATE `uid`=VALUES(`uid`),`name`=VALUES(`name`),`updated_at`=VALUES(`updated_at`)
g.Model("user").Data(g.Map{"uid": 10001, "name": "john"}).Save()

需要注意的是Replace方法也會更新該字段,因為該操作相當于刪除已存在的舊數據并重新寫一條數據。

?updated_at??更新時間

在執行Insert/InsertIgnore/BatchInsert/BatchInsertIgnore?方法時自動寫入該時間,在執行Save/Update?時更新該時間(注意當寫入數據存在時會更新updated_at?時間,不會更新created_at時間)。

// UPDATE `user` SET `name`='john guo',`updated_at`='2020-06-06 21:00:00' WHERE name='john'
g.Model("user").Data(g.Map{"name" : "john guo"}).Where("name", "john").Update()

// UPDATE `user` SET `status`=1,`updated_at`='2020-06-06 21:00:00' ORDER BY `login_time` asc LIMIT 10
g.Model("user").Data("status", 1).Order("login_time asc").Limit(10).Update()

// INSERT INTO `user`(`id`,`name`,`update_at`) VALUES(1,'john guo','2020-12-29 20:16:14') ON DUPLICATE KEY UPDATE `id`=VALUES(`id`),`name`=VALUES(`name`),`update_at`=VALUES(`update_at`)
g.Model("user").Data(g.Map{"id": 1, "name": "john guo"}).Save()

需要注意的是Replace方法也會更新該字段,因為該操作相當于刪除已存在的舊數據并重新寫一條數據。

?deleted_at??數據軟刪除

軟刪除會稍微比較復雜一些,當軟刪除存在時,所有的查詢語句都將會自動加上deleted_at的條件。

// UPDATE `user` SET `deleted_at`='2020-06-06 21:00:00' WHERE uid=10
g.Model("user").Where("uid", 10).Delete()

查詢的時候會發生一些變化,例如:

// SELECT * FROM `user` WHERE uid>1 AND `deleted_at` IS NULL
g.Model("user").Where("uid>?", 1).All()

可以看到當數據表中存在deleted_at?字段時,所有涉及到該表的查詢操作都將自動加上deleted_at IS NULL的條件

聯表查詢的場景

如果關聯查詢的幾個表都啟用了軟刪除特性時,會發生以下這種情況,即條件語句中會增加所有相關表的軟刪除時間判斷。

// SELECT * FROM `user` AS `u` LEFT JOIN `user_detail` AS `ud` ON (ud.uid=u.uid) WHERE u.uid=10 AND `u`.`deleted_at` IS NULL AND `ud`.`deleteat` IS NULL LIMIT 1
g.Model("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid").Where("u.uid", 10).One()

Unscoped忽略時間特性

Unscoped?用于在鏈式操作中忽略自動時間更新特性,例如上面的示例,加上Unscoped方法后:

// SELECT * FROM `user` WHERE uid>1
g.Model("user").Unscoped().Where("uid>?", 1).All()

// SELECT * FROM `user` AS `u` LEFT JOIN `user_detail` AS `ud` ON (ud.uid=u.uid) WHERE u.uid=10 LIMIT 1
g.Model("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid").Where("u.uid", 10).Unscoped().One()

以上內容來源自官方文檔:https://goframe.org/pages/viewpage.action?pageId=1114139

軟刪除和物理刪除的區別

  • 軟刪除也叫標記刪除,通過字段標記DB中的紀錄是否被刪除:

比如通過is_delete字段標記,默認為0,刪除時設置為1

或者和視頻內容一樣,使用deleted_at字段標記刪除的時間,默認為null

  • 物理刪除,就是直接將DB中的記錄刪掉

如何優雅的實現軟刪除

如果你詳細看完了ORM鏈式操作-時間維護這部分內容,想必心中一定有了答案。

結合商業項目需求,有哪些容易踩的坑?

一定要結合實際情況決定使用物理刪除還是軟刪除,下面的例子拋轉引玉:

1. 比如管理后臺刪除輪播圖這種操作建議使用軟刪除。因為可能出現誤操作的情況,軟刪除可以及時找回;而且輪播圖的數據往往不多,冗余保存也是沒有問題的。

2. 再比如用戶移除收藏文章的記錄,建議物理刪除。原因是收藏文章,取消收藏這類操作比較隨意,沒有任何風險。再者這類數據量比較龐大,軟刪除沒有意義,反而會增加收藏操作的邏輯壓力和DB壓力。

本文轉載自微信公眾號「 程序員升級打怪之旅」,作者「王中陽Go」,可以通過以下二維碼關注。

轉載本文請聯系「 程序員升級打怪之旅」公眾號。

責任編輯:武曉燕 來源: 程序員升級打怪之旅
相關推薦

2022-11-15 07:50:47

ORM鏈式操作刪除

2017-07-26 11:32:50

NETRabbitMQ系統集成

2015-11-26 10:53:45

LinuxWindowsMac OS

2018-08-20 10:40:09

Redis位圖操作

2009-06-02 17:27:28

Hibernate框架ORM

2020-08-26 07:17:19

通信

2022-02-18 17:34:47

數組多維五維數組

2023-06-16 09:08:39

ReactContextRFC

2023-12-14 12:56:00

鏈式調用代碼

2021-03-28 09:17:18

JVM場景鉤子函數

2022-09-14 08:16:48

裝飾器模式對象

2025-07-09 07:20:00

GORMGo分頁

2021-11-19 10:55:03

GitOps運維自動化

2022-09-01 13:12:53

LinuxTC網絡限流

2020-08-24 13:35:59

trycatchJava

2023-06-28 08:25:14

事務SQL語句

2024-01-17 10:16:22

前端國際化消息鍵

2023-01-31 10:29:26

JavaScript國際化國際化庫

2020-04-03 13:45:16

刪除Linux垃圾文件

2022-06-02 10:02:47

Kubectl更新應用Linux
點贊
收藏

51CTO技術棧公眾號

欧美二区三区在线| 中文在线最新版天堂8| 欧美1区二区| 一本色道久久综合狠狠躁篇的优点| 国产精品久久久久久久龚玥菲| 成人欧美一区二区三区黑人麻豆| 天天综合狠狠精品| 午夜亚洲性色视频| 国产精品免费一区二区三区四区| 日本大胆欧美| 国产精品黄色影片导航在线观看| 电影一区二区在线观看| 日韩亚洲欧美成人| 日本黄色一区| 一本色道久久88综合日韩精品| 17videosex性欧美| 欧美精品一区二区三| 尤物视频在线看| 日韩精品一区二区三区中文不卡 | 欧美在线一二三四区| 污污免费网站| 亚洲在线视频免费观看| 手机看片1024久久| 亚洲超碰精品一区二区| 中文字幕在线看| 日本道色综合久久| 国产在线1区| 亚洲欧洲在线观看| 久久亚洲精精品中文字幕| 久久免费福利视频| 成人激情开心网| 欧美成人tv| 亚洲三区在线| 久久国产精品美女| 国外成人在线播放| 四虎国产精品免费观看| 亚洲最大av在线| 久久三级福利| 成年人网站国产| 国产精品系列在线| 偷拍自拍在线| 亚洲成av人乱码色午夜| 狠狠久久综合| 国产精品国产三级国产aⅴ浪潮| 亚洲加勒比久久88色综合| 国偷自产一区二区免费视频 | 欧美日韩成人在线播放| 亚洲视频一起| 中文字幕精品在线视频| eeuss中文| 久久精品日韩一区二区三区| 黄网在线播放| 91久久线看在观草草青青| 18在线观看的| 久久精品国产亚洲精品2020| 岳的好大精品一区二区三区| 99国产高清| 美女网站色91| 日日噜噜噜噜久久久精品毛片| 午夜精品福利一区二区蜜股av| 伊人影院在线视频| 欧美成人精品影院| 五月久久久综合一区二区小说| 日韩一本精品| 中文字幕在线视频一区| 在线看av的网址| 久久人人爽人人爽人人片亚洲| 国产欧美日韩| 亚洲欧美综合一区| 国产精品久久久久久久久晋中| 91看片在线观看| 麻豆国产精品va在线观看不卡 | 四虎免费av| 欧美一级爆毛片| 久久国产精品免费精品3p| 国产欧美一区二区三区不卡高清| 不卡av在线免费观看| 韩国三级在线观看久| www亚洲精品| 亚洲一区二区三区高清| 五月天婷婷激情视频| 5858s免费视频成人| 深夜福利一区| 神马影院我不卡| 亚洲一区在线看| 国产极品一区| 欧美日韩亚洲在线| 亚洲中国最大av网站| 欧美xnxx| 欧美性xxxx69| 欧美日韩一二三四五区| 精品国产一区二区三区2021| 日韩电影大全在线观看| 午夜久久久久久电影| av在线播放一区二区| 日本一区二区精品视频| 亚洲国产综合91精品麻豆| 亚洲黑人在线| 中文字幕久久一区| 欧美亚洲图片小说| 成人久久久久| 国产无遮挡又黄又爽免费网站| 亚洲人成亚洲人成在线观看| 亚洲在线日韩| 日本1级在线| 国产精品第七影院| 欧美精彩视频一区二区三区| 欧美www.| 伊人久久大香线蕉午夜av| 欧美午夜精品一区| 日韩理论在线| 91大神影片| 性欧美激情精品| 久久久久久久久久久久久女国产乱| aaa在线播放视频| 精品视频一区二区三区四区| 亚洲国产成人高清精品| 都市激情亚洲| 内射国产内射夫妻免费频道| 一区二区三区黄色| 国产麻豆视频一区二区| 春色校园综合激情亚洲| 视频一区视频二区视频| 欧美一区二区视频在线观看 | 亚洲国产精品综合小说图片区| 久久久亚洲午夜电影| 高清一区二区三区| 素人av在线| 国产精品草莓在线免费观看| 久久亚洲精精品中文字幕早川悠里 | 国产资源在线观看入口av| 精品无人区一区二区三区竹菊| 欧美午夜丰满在线18影院| 欧美午夜精彩| 2222www色视频在线观看| 欧美最顶级的aⅴ艳星| 日韩毛片精品高清免费| 久久99蜜桃| 一二三区高清| 亚洲影院色无极综合| 欧美日韩国产综合一区二区三区 | 国产欧美va欧美不卡在线| 在线免费成人| 国内外免费激情视频| 欧美黑人巨大xxx极品| 国产精品色在线观看| 无码日韩精品一区二区免费| 香港三级经典全部种子下载| 亚洲www永久成人夜色| 欧洲一区在线电影| 免费欧美在线| 成人啊v在线| 三级在线免费看| 国产精品大陆在线观看| 日韩欧美aⅴ综合网站发布| 中文在线播放一区二区| 国产欧美久久久久久久久| 日本免费高清一区| 亚洲天堂av女优| 国产欧美一区二区在线观看| 神马久久av| 高h视频在线| 亚洲一区二区精品在线观看| 中文字幕亚洲综合久久| 亚洲精品一二三| 在线播放日韩| 日本欧美日韩| 美乳中文字幕| 欧美日韩一区二区视频在线观看| 亚洲欧美在线看| 国产精品久久久久9999吃药| 国产一区日韩欧美| 成人午夜精品| 日韩黄色网址| 久久久无码中文字幕久...| 97在线视频精品| 欧美三级欧美一级| 成人久久18免费网站麻豆| 精品国产91久久久久久浪潮蜜月| 九色porny在线| 亚洲精品一二三四五区| 91麻豆精品秘密入口| 国产小视频国产精品| 午夜视频一区在线观看| 精品一区二区三区久久| 精品视频97| 午夜影院在线观看国产主播| 中文日本高清免费| 91制片厂免费观看| 国产精品狼人色视频一区| 日韩高清欧美高清| 香蕉成人伊视频在线观看| 国产一区二区伦理片| 91综合视频| 成人在线日韩| 成人片在线看| 天天干狠狠干| 欧美三级一级片| 日本成人三级| 国产精品视频免费在线|