gorm 開發架構 寫外掛程式

2022-07-11 03:24:13 字數 1942 閱讀 1368

目錄gorm使用可鏈結的api,*gorm.db是鏈的橋梁,對於每個鏈api,它將建立乙個新的關係。

db, err := gorm.open("postgres", "user=gorm dbname=gorm sslmode=disable")

// 建立新關係

db = db.where("name = ?", "jinzhu")

// 過濾更多

if somecondition else

if yetanothercondition

當我們開始執行任何操作時,gorm將基於當前的*gorm.db建立乙個新的*gorm.scope例項

// 執行查詢操作

db.first(&user)

並且基於當前操作的型別,它將呼叫註冊的creating,updating,querying,deletingrow_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`用於建立過程

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)

gorm定義了**以執行其crud操作,在開始編寫外掛程式之前檢查它們。

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...