網站首頁 編程語言 正文
前言
最近一直在用GoFrame(下文簡稱gf)來開發項目,在熟悉業務邏輯之后就是馬不停蹄的擼代碼了。
之前整理過結構體和json轉換的文章:GoFrame必知必會之Scan:類型轉換,今天整理同樣比較重要的ORM相關的文章。
gf是支持ORM原生操作的,在ORM鏈式操作執行不了太過于復雜的SQL操作時,可以交給方法操作來處理。
這篇文章整理原生操作的常用方法,下篇文章根據整理的原生方法整理對應的開箱體驗。
常用方法
SQL操作方法,返回原生的標準庫sql對象
- Query是原始的數據查詢方法,返回的是原生的標準庫的結果集對象,需要自行解析。
- Exec方法用于寫入/更新的SQL的操作。
Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error) Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error) Prepare(ctx context.Context, query string) (*sql.Stmt, error)
數據表記錄查詢:
- 查詢單條記錄、查詢多條記錄、獲取記錄對象、查詢單個字段值(鏈式操作同理)
- 在執行數據查詢時推薦使用Get*系列查詢方法。
GetAll(ctx context.Context, sql string, args ...interface{}) (Result, error) GetOne(ctx context.Context, sql string, args ...interface{}) (Record, error) GetValue(ctx context.Context, sql string, args ...interface{}) (Value, error) GetArray(ctx context.Context, sql string, args ...interface{}) ([]Value, error) GetCount(ctx context.Context, sql string, args ...interface{}) (int, error) GetScan(ctx context.Context, objPointer interface{}, sql string, args ...interface{}) error
數據單條操作
Insert/Replace/Save方法中的data參數支持的數據類型為:
string/map/slice/struct/*struct,當傳遞為slice類型時,自動識別為批量操作,此時batch參數有效。
Insert(ctx context.Context, table string, data interface{}, batch...int) (sql.Result, error)
Replace(ctx context.Context, table string, data interface{}, batch...int) (sql.Result, error)
Save(ctx context.Context, table string, data interface{}, batch...int) (sql.Result, error)
在這里由衷的感嘆一句:gf確實非常方便。至今記得自己用gorm1.1版本時,困頓于批量插入無法自拔:# Go GORM是時候升級新版本了 2.0新特性介紹
數據修改/刪除
Update(ctx context.Context, table string, data interface{}, condition interface{}, args ...interface{}) (sql.Result, error)
Delete(ctx context.Context, table string, condition interface{}, args ...interface{}) (sql.Result, error)
總結
雖然GoFrame的ORM鏈式操作非常簡單且強大,但是業務中總還是有一些邏輯需要使用原生方法實現,化繁為簡。
原文鏈接:https://juejin.cn/post/7089980894525521957
相關推薦
- 2022-07-15 Python?print函數:如何將對象打印輸出_python
- 2022-06-22 C++內存管理詳解使用方式_C 語言
- 2022-04-15 python實現請求數據包簽名_python
- 2022-07-16 from server (NotFound): pods “XXX“ not found
- 2022-03-03 sublime-text - Sublime Text 3,在注釋的下一行,如何取消自動注釋?
- 2023-07-05 React通過props的children實現插槽功能
- 2023-01-28 一文詳解Go語言fmt標準庫的常用占位符使用_Golang
- 2022-04-10 python?tkinter實現簡單計算器功能_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支