能夠快速使用的Gorm框架使用筆記

2021-10-08 10:54:50 字數 2185 閱讀 6802

使用(見之前的部落格)

gorm事務處理

nil//延時關閉資料庫連線

defer db.

close

()gorm.open(「mysql」,「root:123456@tcp(127.0.0.1:3306)/mysql?charset=utf8」)詳解

在高併發實踐中,為了提高資料庫連線的使用率,避免重複建立資料庫連線帶來的效能消耗,會經常使用資料庫連線池技術來維護資料庫連線。

gorm自帶了資料庫連線池使用非常簡單只要設定下資料庫連線池引數即可。

//定義乙個工具包,用來管理gorm資料庫連線池的初始化工作。

package tools

//定義全域性的db物件,我們執行資料庫操作主要通過他實現。

var _db *gorm.db

//包初始化函式,golang特性,每個包初始化的時候會自動執行init函式,這裡用來初始化gorm。

func

init()

//設定資料庫連線池引數

_db.db(

).setmaxopenconns

(100

)//設定資料庫連線池最大連線數

_db.db(

).setmaxidleconns(20

)//連線池最大允許的空閒連線數,如果沒有sql任務需要執行的連線數大於20,超過的連線會被連線池關閉。

}//獲取gorm db物件,其他包需要執行資料庫查詢的時候,只要通過tools.getdb()獲取db物件即可。

//不用擔心協程併發使用同樣的db物件會共用同乙個連線,db物件在呼叫他的方法的時候會從資料庫連線池中獲取新的連線

func

getdb()

*gorm.db

使用示例:

package main

//匯入tools包

import tools

func

main()

//自動生成sql: select * from `users` where (username = 'tizi365') limit 1

db.where

("username = ?"

,"tizi365").

first

(&u)

}

在開發中經常需要資料庫事務來保證多個資料庫寫操作的原子性。例如電商系統中的扣減庫存和儲存訂單。

gorm事務用法:

// 開啟事務

tx := db.

begin()

//在事務中執行資料庫操作,使用的是tx變數,不是db。

//庫存減一

//等價於: update `foods` set `stock` = stock - 1 where `foods`.`id` = '2' and stock > 0

//rowsaffected用於返回sql執行後影響的行數

rowsaffected := tx.

model

(&food)

.where

("stock > 0").

update

("stock"

, gorm.

expr

("stock - 1"))

.rowsaffected

if rowsaffected ==

0err := tx.

create

(儲存訂單)

.error

//儲存訂單失敗,則回滾事務

if err !=

nilelse

gorm快速使用

模型 為表中的字段,記得欄位名開頭大寫 type patient struct 此例為postgresql func main 不重新建立複數結尾的表,還是原來的表,可以利用原表中的結構,資料 db.singulartable true defer db.close 建立 patient db.cr...

gorm 強制使用索引 必看的資料庫使用規範

關於mysql資料庫規範,相信大家多少看過一些文件。本篇文章給大家詳細分類總結了資料庫相關規範,從庫表命名設計規範講起,到索引設計規範,後面又給出sql編寫方面的建議。相信這些規範適用於大多數公司,也希望大家都能按照規範來使用我們的資料庫,這樣我們的資料庫才能發揮出更高的效能。關於庫 強制 庫的名稱...

使用Sanic框架快速搭建測試介面

from sanic import sanic from sanic import response from sanic.response import text,json 給你的專案起個名 路由裝飾器,和flask很相似。async deftest request return text hel...