參考:事件
文章目錄
xorm是支持兩種實現方式的
- 在Struct中的特定方法來作爲事件的方法(也就是說通過繼實現相應接口的方式來實現)
- 在執行語句的過程中執行事件(也就是說在engine或者session執行的時候進行方法調用實現)。
1、Struct特定方法
這邊的事件說的是在數據庫表映射的結構體中實現xorm對應的接口方法。這邊應該是使用模板設計模式,我們來看一下具體的方法
1、插入到數據庫前、後
在將此struct插入到數據庫前後執行
//之前
BeforeInsert()
//之後
AfterInsert()
2、更新到數據庫前、後
在將此struct更新到數據庫前後執行
//之前
BeforeUpdate()
//之後
AfterUpdate()
3、從數據庫刪除前、後
在將此struct更新到數據庫前後執行
//之前
BeforeDelete()
//之後
AfterDelete()
4、查詢出來,設置到結構體前、後
在將此struct對應的條件數據從數據庫刪除前後執行
在 Get 或 Find 方法中,當數據已經從數據庫查詢出來,而在設置到結構體之前調用,name爲數據庫字段名稱,cell爲數據庫中的字段值。
//之前
func BeforeSet(name string, cell xorm.Cell)
//之後
func AfterSet(name string, cell xorm.Cell)
2、執行過程中實現
1、臨時執行某個方法之前執行
Before(beforeFunc interface{}),聲明一個Before的方法實現,在engine調用數據庫查詢操作之前調用該Before方法。
before := func(bean interface{}){
fmt.Println("before", bean)
}
engine.Before(before).Insert(&obj)
After(afterFunc interface{})
2、臨時執行某個方法之後執行
After(afterFunc interface{}),聲明一個After的方法實現,在engine調用數據庫查詢操作之前調用該After方法。
after := func(bean interface{}){
fmt.Println("after", bean)
}
engine.After(after).Insert(&obj)