事件

事件

xorm 支持两种方式的事件,一种是在 Struct中的特定方法来作为事件的方法,一种是在执行语句的过程中执行事件。

在Struct中作为成员方法的事件如下:

  • BeforeInsert()

在将此struct插入到数据库之前执行

  • BeforeUpdate()

在将此struct更新到数据库之前执行

  • BeforeDelete()

在将此struct对应的条件数据从数据库删除之前执行

  • func BeforeSet(name string, cell xorm.Cell)

在 Get 或 Find 方法中,当数据已经从数据库查询出来,而在设置到结构体之前调用,name为数据库字段名称,cell为数据库中的字段值。

  • func AfterSet(name string, cell xorm.Cell)

在 Get 或 Find 方法中,当数据已经从数据库查询出来,而在设置到结构体之后调用,name为数据库字段名称,cell为数据库中的字段值。

  • AfterLoad()

在 Get 或 Find 方法中,当数据已经从数据库查询出来,而在设置到结构体之后调用。

  • AfterLoad(*xorm.Session)

在 Get 或 Find 方法中,当数据已经从数据库查询出来,而在设置到结构体之后调用,并传递xorm.Session参数。

  • AfterInsert()

在将此struct成功插入到数据库之后执行

  • AfterUpdate()

在将此struct成功更新到数据库之后执行

  • AfterDelete()

在将此struct对应的条件数据成功从数据库删除之后执行

在语句执行过程中的事件方法为:

  • Before(beforeFunc interface{})

临时执行某个方法之前执行

before := func(bean interface{}){
    fmt.Println("before", bean)
}
engine.Before(before).Insert(&obj)
  • After(afterFunc interface{})

临时执行某个方法之后执行

after := func(bean interface{}){
    fmt.Println("after", bean)
}
engine.After(after).Insert(&obj)

其中beforeFunc和afterFunc的原型为func(bean interface{}).