Top ↑
无匹配结果,请重新输入
Pojo拦截器
May 16, 2019 10:27:39 AM

PojoInterceptor能解决什么问题

  • 自定义主键生成策略
  • 更新对象时自动更新时间戳
  • 删除对象时自动清除缓存
  • 其他自定义Pojo行为

默认实现类DefaultPojoInterceptor

拦截器类型是通过@Table(interceptor=XXX.class)配置的,默认是DefaultPojoInterceptor

DefaultPojoInterceptor当前实现了3个注解, @PrevInsert/@PrevUpdate/@PrevDelete, 具体用法请查阅插入前后的设置

当前支持的事件及其触发条件

  • prevInsert 执行dao.insert/dao.fastInsert
  • prevUpdate 执行dao.update
  • prevDelete 执行dao.delete

扩展示例

自定义更新行为 @MyUpdateTime

public MyPojoInterceptor extends DefaultPojoInterceptor {

    protected void setupFieldAnnotation(final MappingField mf, final Field field, final Annotation anno) {
        super.setupFieldAnnotation(mf,field,anno);
        if (anno instanceof MyUpdateTime) {
            super.list.add(new BasicPojoInterceptor() {
                public void onEvent(Object obj, Entity<?> en, String event, Object... args) {
                    if ("prevUpdate".equals(event) {
                        // 对obj进行操作
                        // MappingField有字段信息
                        // Field的java属性反射对象
                    }
                }
            });
        }
    }
}

禁用该特性

static {
    NutConf.DAO_USE_POJO_INTERCEPTOR = false;
}

本页面的文字允许在知识共享 署名-相同方式共享 3.0协议GNU自由文档许可证下修改和再使用。