codecamp

Dao拦截器

为啥要实现Dao拦截器

  • DaoRunner和DaoExecutor的定制成本较高,拦截器让NutDao更容易定制.
  • 之前的设计没法很好的实现事务分离(DaoSupport和NutDaoRunner均有事务相关的代码)

内置的拦截器实现

  • log -- 输出SQL语句到日志,这是NutDao默认情况下唯一启用的拦截器
  • time -- 打印sql执行耗时

如何自定义

需要实现的接口

public interface DaoInterceptor {
    void filter(DaoInterceptorChain chain) throws DaoException;
}
// DaoInterceptorChain 包含当前执行的全部信息,如Connection,DaoStatment等等

示例实现

public class MyDaoInterceptor {
    public void filter(DaoInterceptorChain chain) throws DaoException {
        DaoStatement st = chain.getDaoStatement();
        if (st instanceof NutPojo) {
            // 如果是dao.insert(user)之类的操作,会进入这个分支
        } else if (st instanceof NutSql) {
            // 如果是自定义SQL,会进入这个分支
        }
        chain.doChain();//继续下一个拦截器执行
    }
}

在ioc中的配置,以dao.js为例

var ioc = {
        dao : {
            type : "org.nutz.dao.impl.NutDao",
            args : [{refer:"dataSource"}],
            fields : {
                interceptors : [
                            "log", // 默认的日志还需要的
                            "time", // 加个时间又如何呢?
                            "net.demo.MyDaoInterceptor" // 加入自己的,才合适
                            ]
            }
        }
}
注解列表
调用存储过程
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

表达式引擎

maplist结构

图像处理小军刀

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }