庫安裝
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_idx
和title_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 interr := 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 !=nilif 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,刪除資料分為軟刪除和硬刪除。軟刪即改變資...