GoFrame框架ORM原生方法對(duì)象操作開箱體驗(yàn)
前言
最近一直在用GoFrame(下文簡(jiǎn)稱gf)來開發(fā)項(xiàng)目,在熟悉業(yè)務(wù)邏輯之后就是馬不停蹄的擼代碼了。
之前整理過結(jié)構(gòu)體和json轉(zhuǎn)換的文章:GoFrame必知必會(huì)之Scan:類型轉(zhuǎn)換,今天整理同樣比較重要的ORM相關(guān)的文章。
gf是支持ORM原生操作的,在ORM鏈?zhǔn)讲僮鲌?zhí)行不了太過于復(fù)雜的SQL操作時(shí),可以交給方法操作來處理。
上一篇文章 整理了ORM的原生方法,這篇文章根據(jù)整理的原生方法整理對(duì)應(yīng)的開箱體驗(yàn)。
開箱體驗(yàn)
1. ORM對(duì)象
// 獲取默認(rèn)配置的數(shù)據(jù)庫(kù)對(duì)象(配置名稱為"default") db := g.DB() // 獲取配置分組名稱為"user"的數(shù)據(jù)庫(kù)對(duì)象 db := g.DB("user") // 使用原生單例管理方法獲取數(shù)據(jù)庫(kù)對(duì)象單例 db, err := gdb.Instance() db, err := gdb.Instance("user")
tips
不用的時(shí)候不需要使用Close方法關(guān)閉數(shù)據(jù)庫(kù)連接,數(shù)據(jù)庫(kù)引擎底層采用了鏈接池設(shè)計(jì),當(dāng)鏈接不再使用時(shí)會(huì)自動(dòng)關(guān)閉
2. 數(shù)據(jù)寫入
r, err := db.Insert(ctx, "user", gdb.Map { "name": "王中陽", })
3. 數(shù)據(jù)查詢(單條)
雖然limit 10,但是因?yàn)槲覀兪褂玫氖荊etOne,仍然只會(huì)返回單條數(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ù)量(默認(rèn)是10)。
- 表示批量寫入數(shù)據(jù)時(shí)的每批次數(shù)量,這個(gè)數(shù)值跟你數(shù)據(jù)庫(kù)服務(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ù)建議使用?占位符進(jìn)行輸入,避免SQL注入風(fēng)險(xiǎn)。
總結(jié)
雖然GoFrame的ORM鏈?zhǔn)讲僮鞣浅:?jiǎn)單且強(qiáng)大,但是業(yè)務(wù)中總還是有一些邏輯需要使用原生方法實(shí)現(xiàn),化繁為簡(jiǎn)。
以上就是GoFrame框架ORM原生方法對(duì)象操作開箱體驗(yàn)的詳細(xì)內(nèi)容,更多關(guān)于GoFrame ORM原生方法對(duì)象操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
深度剖析Golang如何實(shí)現(xiàn)GC掃描對(duì)象
這篇文章主要為大家詳細(xì)介紹了Golang是如何實(shí)現(xiàn)GC掃描對(duì)象的,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的小伙伴可以參考一下2023-03-03golang socket斷點(diǎn)續(xù)傳大文件的實(shí)現(xiàn)方法
今天小編就為大家分享一篇golang socket斷點(diǎn)續(xù)傳大文件的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07一文詳解Golang?定時(shí)任務(wù)庫(kù)?gron?設(shè)計(jì)和原理
這篇文章主要介紹了一文詳解Golang?定時(shí)任務(wù)庫(kù)?gron?設(shè)計(jì)和原理,gron是一個(gè)比較小巧、靈活的定時(shí)任務(wù)庫(kù),可以執(zhí)行定時(shí)的、周期性的任務(wù)。gron提供簡(jiǎn)潔的、并發(fā)安全的接口2022-08-08使用Golang創(chuàng)建單獨(dú)的WebSocket會(huì)話
WebSocket是一種在Web開發(fā)中非常常見的通信協(xié)議,它提供了雙向、持久的連接,適用于實(shí)時(shí)數(shù)據(jù)傳輸和實(shí)時(shí)通信場(chǎng)景,本文將介紹如何使用 Golang 創(chuàng)建單獨(dú)的 WebSocket 會(huì)話,包括建立連接、消息傳遞和關(guān)閉連接等操作,需要的朋友可以參考下2023-12-12