目錄gorm使用可鏈結的api,*gorm.db
是鏈的橋梁,對於每個鏈api,它將建立乙個新的關係。
當我們開始執行任何操作時,gorm將基於當前的db, err := gorm.open("postgres", "user=gorm dbname=gorm sslmode=disable")
// 建立新關係
db = db.where("name = ?", "jinzhu")
// 過濾更多
if somecondition else
if yetanothercondition
*gorm.db
建立乙個新的*gorm.scope
例項
並且基於當前操作的型別,它將呼叫註冊的// 執行查詢操作
db.first(&user)
creating
,updating
,querying
,deleting
或row_querying
**來執行操作。
對於上面的例子,將呼叫querying
,參考查詢**
gorm本身由callbacks
提供支援,因此您可以根據需要完全自定義gorm
func updatecreated(scope *scope)
}db.callback().create().register("update_created_at", updatecreated)
// 註冊create程序的**
db.callback().create().remove("gorm:create")
// 從create**中刪除`gorm:create`**
db.callback().create().replace("gorm:create", newcreatefunction)
// 使用新函式`newcreatefunction`替換**`gorm:create`用於建立過程
gorm定義了**以執行其crud操作,在開始編寫外掛程式之前檢查它們。db.callback().create().before("gorm:create").register("update_created_at", updatecreated)
db.callback().create().after("gorm:create").register("update_created_at", updatecreated)
db.callback().query().after("gorm:query").register("my_plugin:after_query", afterquery)
db.callback().delete().after("gorm:delete").register("my_plugin:after_delete", afterdelete)
db.callback().update().before("gorm:update").register("my_plugin:before_update", beforeupdate)
db.callback().create().before("gorm:create").after("gorm:before_create").register("my_plugin:before_create", beforecreate)
func updatetablename(scope *gorm.scope)
db.callback().rowquery().register("publish:update_table_name", updatetablename)
GORM 開發例項
用 hql 的方式,這種方式好處是可以新增 distinct transactional readonly true compiledynamic collection listvlogofallsubspecials int offset 0,int max 10 用 criteria 的方式,這...
基於外掛程式開發的架構研究
最近關注架構問題,從很多方面了解到基於外掛程式開發的優點和方便性。其中乙個典型的例子就是eclipse,允許廣大程式設計師在eclipse的核心框架基礎上進行無限擴充套件。那麼基於外掛程式開發具有哪些好處呢?1 可以將各個功能交給外掛程式完成,那麼對於核心框架來說,其實只需要實現基本事件排程,資料快...
gorm中自己寫sql的方法實現
type result struct var result result dao.db dao.homeworktable raw select sum round unix timestamp finishtime unix timestamp stime 60 as total from hom...