GoFrame框架ORM原生方法對象操作開箱體驗
前言
最近一直在用GoFrame(下文簡稱gf)來開發(fā)項目,在熟悉業(yè)務(wù)邏輯之后就是馬不停蹄的擼代碼了。
之前整理過結(jié)構(gòu)體和json轉(zhuǎn)換的文章:GoFrame必知必會之Scan:類型轉(zhuǎn)換,今天整理同樣比較重要的ORM相關(guān)的文章。
gf是支持ORM原生操作的,在ORM鏈式操作執(zhí)行不了太過于復雜的SQL操作時,可以交給方法操作來處理。
上一篇文章 整理了ORM的原生方法,這篇文章根據(jù)整理的原生方法整理對應(yīng)的開箱體驗。
開箱體驗
1. ORM對象
// 獲取默認配置的數(shù)據(jù)庫對象(配置名稱為"default")
db := g.DB()
// 獲取配置分組名稱為"user"的數(shù)據(jù)庫對象
db := g.DB("user")
// 使用原生單例管理方法獲取數(shù)據(jù)庫對象單例
db, err := gdb.Instance()
db, err := gdb.Instance("user")
tips
不用的時候不需要使用Close方法關(guān)閉數(shù)據(jù)庫連接,數(shù)據(jù)庫引擎底層采用了鏈接池設(shè)計,當鏈接不再使用時會自動關(guān)閉
2. 數(shù)據(jù)寫入
r, err := db.Insert(ctx, "user", gdb.Map {
"name": "王中陽",
})
3. 數(shù)據(jù)查詢(單條)
雖然limit 10,但是因為我們使用的是GetOne,仍然只會返回單條數(shù)據(jù)
one, err := db.GetOne(ctx, "select * from user limit 10")
one, err := db.GetOne(ctx, "select * from user where id=100")
one, err := db.GetOne(ctx, "select * from user where id=?", 100)
one, err := db.GetOne(ctx, "select * from user where id=?", g.Slice{100})
4. 數(shù)據(jù)查詢(列表)
list, err := db.GetAll(ctx, "select * from user limit 10")
list, err := db.GetAll(ctx, "select * from user where age > ? and name like ?", g.Slice{20, "%金%"})
list, err := db.GetAll(ctx, "select * from user where status=?", g.Slice{1})
5. 數(shù)據(jù)保存
數(shù)據(jù)保存是Save,插入數(shù)據(jù)是insert,區(qū)別是是否指定主鍵
r, err := db.Save(ctx, "user", gdb.Map {
"id" : 1,
"name" : "王中陽",
})
6. 批量操作
batch := 10
_, err := db.Insert(ctx, "user", gdb.List {
{"name": "小明"},
{"name": "小華"},
{"name": "小軍"},
{"name": "小高"},
}, batch)
tips
- 其中batch參數(shù)用于指定批量操作中分批寫入條數(shù)數(shù)量(默認是10)。
- 表示批量寫入數(shù)據(jù)時的每批次數(shù)量,這個數(shù)值跟你數(shù)據(jù)庫服務(wù)器配置的SQL BufferSize數(shù)值有關(guān)。
7. 數(shù)據(jù)更新/刪除
// db.Update/db.Delete 同理
// UPDATE `user` SET `name`='王中陽' WHERE `id`=10000
r, err := db.Update(ctx, "user", gdb.Map {"name": "王中陽"}, "id=?", 10000)
// UPDATE `user` SET `name`='王中陽' WHERE `id`=10000
r, err := db.Update(ctx, "user", "name='王中陽'", "id=10000")
// UPDATE `user` SET `name`='王中陽' WHERE `id`=10000
r, err := db.Update(ctx, "user", "name=?", "id=?", "王中陽", 10000)
tips
參數(shù)建議使用?占位符進行輸入,避免SQL注入風險。
總結(jié)
雖然GoFrame的ORM鏈式操作非常簡單且強大,但是業(yè)務(wù)中總還是有一些邏輯需要使用原生方法實現(xiàn),化繁為簡。
以上就是GoFrame框架ORM原生方法對象操作開箱體驗的詳細內(nèi)容,更多關(guān)于GoFrame ORM原生方法對象操作的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
golang socket斷點續(xù)傳大文件的實現(xiàn)方法
今天小編就為大家分享一篇golang socket斷點續(xù)傳大文件的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
一文詳解Golang?定時任務(wù)庫?gron?設(shè)計和原理
這篇文章主要介紹了一文詳解Golang?定時任務(wù)庫?gron?設(shè)計和原理,gron是一個比較小巧、靈活的定時任務(wù)庫,可以執(zhí)行定時的、周期性的任務(wù)。gron提供簡潔的、并發(fā)安全的接口2022-08-08
使用Golang創(chuàng)建單獨的WebSocket會話
WebSocket是一種在Web開發(fā)中非常常見的通信協(xié)議,它提供了雙向、持久的連接,適用于實時數(shù)據(jù)傳輸和實時通信場景,本文將介紹如何使用 Golang 創(chuàng)建單獨的 WebSocket 會話,包括建立連接、消息傳遞和關(guān)閉連接等操作,需要的朋友可以參考下2023-12-12

