Easy4JFinal【每日分享】Model里的保存、更新、删除环绕事件

在Easy4JFinal里,我们有个EasyModel继承Model,然后BaseModel统统继承于EasyModel。

说再多不如看上代码:

/**
 * Created by L.cm on 2016/7/5.
 */
public class EasyModel<M extends EasyModel> extends Model<M> {
    /**
     * model保存
     * @return {boolean}
     */
    @Override
    public boolean save() {
        onSaveBefore();
        boolean result = super.save();
        onSaveAfter();
        return result;
    }

    /**
     * 保存之前
     */
    protected void onSaveBefore(){}
    /**
     * 保存之后
     */
    protected void onSaveAfter(){}

    /**
     * model更新
     * @return {boolean}
     */
    @Override
    public boolean update() {
        onUpdateBefore();
        boolean result = super.update();
        onUpdateAfter();
        return result;
    }

    /**
     * 更新之前
     */
    protected void onUpdateBefore(){}
    /**
     * 更新之后
     */
    protected void onUpdateAfter(){}

    /**
     * model删除
     * @return {boolean}
     */
    @Override
    public boolean delete() {
        onDeleteBefore();
        boolean result = super.delete();
        onDeleteAfter();
        return result;
    }

    /**
     * 删除之前
     */
    protected void onDeleteBefore(){}
    /**
     * 删除之后
     */
    protected void onDeleteAfter(){}
}

在生成器中,我们将生成的BaseModel改成了继承我们的EasyModel,这样生成出来的代码都会拥有上面的几个方法。

/**
 * Created by L.cm on 2016/7/5.
 */
public class EasyBaseModelGenerator extends BaseModelGenerator {

    public EasyBaseModelGenerator(String baseModelPackageName, String baseModelOutputDir) {
        super(baseModelPackageName, baseModelOutputDir);

        this.importTemplate =
                "import net.dreamlu.easy.commons.base.EasyModel;%n" +
                "import com.jfinal.plugin.activerecord.IBean;%n%n";

        this.classDefineTemplate =
                "/**%n" +
                " * Generated by Easy4JFinal, do not modify this file.%n" +
                " */%n" +
                "@SuppressWarnings(\"serial\")%n" +
                "public abstract class %s<M extends %s<M>> extends EasyModel<M> implements IBean {%n%n";
    }
}

在你的Model中按需重写onSaveBefore等6个方法即可,如我们Options中的代码:

/**
 * 根据key删除指定的字典
 * @param key
 */
public void removeByKey(String key) {
	CacheKit.remove(CACHE_NAME, key);
}

/**
 * 更新后删除缓存
 */
@Override
protected void onUpdateAfter() {
	removeByKey(this.getKey());
}

/**
 * 删除后删除缓存
 */
@Override
protected void onDeleteAfter() {
	removeByKey(this.getKey());
}

下面我再说说它的使用场景:

  1. 在很多公司的表都会设计一个最后更新者更新时间。在这里我们就可以结合ServletContextInterceptor(明天来讲)拿取当前线程中的用户信息将这个最后更新者保存进去。深度解耦,代码优雅。

  2. 在Model更新之后清理对用的缓存信息,这个可能会比较常用。

  3. 维护关联的Model信息。

  4. 重要Model的操作日志等。

今日分享就到这了,明天继续。

Easy4JFinal源码地址:http://git.oschina.net/dreamlu/Easy4JFinal

捐助共勉
版权声明:若无特殊注明,本文皆为原创,转载请保留文章出处。