golang gorm 基本使用

2022-06-28 01:12:14 字數 2658 閱讀 3999

庫安裝

go get -u github.com/jinzhu/gorm

資料庫連線

連線比較簡單,直接呼叫gorm.open傳入資料庫位址即可

github.com/jinzhu/gorm/dialects/mysql是 golang 的 mysql 驅動,實際上就是github.com/go-sql-driver/mysql作者這裡為了好記,重新弄了個名字

這裡我用的 mysql,實際上支援基本上所有主流的關聯式資料庫,連線方式上略有不同

db.db().setmaxidleconns(10

)db.db().setmaxopenconns(

100)

還可以使用db.db()物件設定連線池資訊

表定義先來定義乙個點讚表,這裡面一條記錄表示某個使用者在某個時刻對某篇文章點了乙個贊,用 ip + ua 來標識使用者,title 標識文章標題

type like struct

gorm 用 tag 的方式來標識 mysql 裡面的約束

建立索引只需要直接指定列即可,這裡建立了兩個索引,ip_idxtitle_idx;如果需要多列組合索引,直接讓索引的名字相同即可;如果需要建立唯一索引,指定為unique_index即可

支援時間型別,直接使用time.time即可

建立表

if !db.hastable(&like{}) ).error; err !=nil 

}

直接通過db.createtable就可以建立表了,非常方便,還可以通過db.set設定一些額外的表屬性

插入

like := &like, "

-"))) >> 1

, createdat: time.now(),

}if err := db.create(like).error; err !=nil

先構造已給物件,直接呼叫db.create()就可以插入一條記錄了

刪除

if err := db.where(&like).delete(like{}).error; err !=nil

先用db.where()構造查詢條件,再呼叫db.delete()就可以刪除

查詢

var count int

err := db.model(&like{}).where(&like).count(&count).error

if err !=nil

先用db.model()選擇乙個表,再用db.where()構造查詢條件,後面可以使用db.count()計算數量,如果要獲取物件,可以使用db.find(&likes)或者只需要查一條記錄db.first(&like)

修改

db.model(&user).update("

name

", "

hello")

db.model(&user).updates(user)

db.model(&user).updates(user) //

nothing update

我這個系統裡面沒有更新需求,這幾個例子來自於官網,第乙個是更新單條記錄;第二個是更新整條記錄,注意只有非空字段才會更新;第三個例子是不會更新的,在系統設計的時候要盡量避免這些空值有特殊的含義,如果一定要更新,可以使用第一種方式,設定單個值

錯誤處理

其實你已經看到了,這裡基本上所有的函式都是鏈式的,全部都返回db物件,任何時候呼叫db.error就能獲取到錯誤資訊,非常方便

事務

func createanimals(db *gorm.db) err ).error; err !=nil 

if err := tx.create(&animal).error; err !=nil

tx.commit()

return

nil}

事務的處理也很簡單,用db.begin()宣告開啟事務,結束的時候呼叫tx.commit(),異常的時候呼叫tx.rollback()

其他還可以使用如下方式設定日誌輸出級別以及改變日誌輸出地方

db.logmode(true

)db.setlogger(gorm.logger)

db.setlogger(log.new(os.stdout,

"\r\n

", 0))

也支援普通的 sql,但是建議盡量不要使用

Golang gorm 的使用總結 1

前言 1 資料最終是儲存在資料庫一張張的表中,2 乙個結構體例項對映到資料庫中一條記錄。3 資料庫表中,只需要該錶下某乙個列就可以查出整張表的資訊 例如 table column users uid name,pasword,email,profileselect from users where ...

golang gorm 模糊查詢

在grom的官方文件中模糊查詢給的方案是這樣的 like db.where name like jin find users 但是在實際操作中,我使用了fmt.sprintf去拼接where裡面的查詢條件,如下 where fmt.sprintf dns like s createdbnameinf...

golang gorm使用心得小結,持續更新

官方文件 1,目前暫不支援批量插入資料,可以用sql語句直接執行或迴圈單次create。但因為業務需要知道插入後的主鍵id,所以只能迴圈新增,迴圈新增後可通過.操作取id。如 err db.create m error if err nil id m.id2,刪除資料分為軟刪除和硬刪除。軟刪即改變資...