zoukankan      html  css  js  c++  java
  • mybatis拦截器,分页插件

    mybatis拦截器,也就是插件。

    在之前学习javaweb时,有filter过滤器,mybatis的拦截器与之很相似。

    mybatis的拦截器在映射语句执行过程中进行拦截,而且只能拦截四大对象中的方法。

    1.Executor 执行器对象

    2.ParameterHander 参数处理器对象

    3.ResultSetHander 结果集处理器对象

    4.StatementHander 构建sql语句处理器对象

    使用拦截器的步骤

    1.创建类实现Interceptorj接口,设置@Intercepts,重写接口中的方法

    @Intercepts({@Signature(
            type = Executor.class,//对象类型,只能是四大对象类型
            method = "update", //拦截方法
            args ={MappedStatement.class,Object.class/*方法中用到的参数类型*/})})//可以点击拦截对象查看拦截方法的参数,
    public class PageIntercepts implements Interceptor {
    //    拦截方法,返回结果:目标方法执行后返回的结果
        @Override
        public Object intercept(Invocation invocation) throws Throwable {
    
            return invocation.proceed();
        }
    
    //    获取配置文件中的参数信息,该方法可以不重写
        @Override
        public void setProperties(Properties properties) {
    
        }
    }

    2.注册插件

    至此一个拦截器就完成了。

    下面我们自己写一个基于拦截器的分页插件,通过改造上面的模板:

    @Intercepts({@Signature(
            type = StatementHandler.class,//对象类型,只能是四大对象类型
            method = "prepare", //拦截方法
            args ={Connection.class,Integer.class/*方法中用到的参数类型*/})})//可以点击拦截对象查看拦截方法的参数,
    public class PageIntercepts implements Interceptor {
    //    拦截方法,返回结果:目标方法执行后返回的结果
        @Override
        public Object intercept(Invocation invocation) throws Throwable {
            //获取目标对象
            StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
    //        获取要执行的sql命令
            String sql = statementHandler.getBoundSql().getSql();
            System.out.println("要执行的sql命令为:"+sql);
    //        为sql语句添加分页
            sql+=" limit 0,10";
    //        元数据对象,可以对原始数据进行操作
            MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
    //        重新绑定修改后的sql语句
            metaObject.setValue("boundSql.sql", sql);
    //        执行目标方法
            return invocation.proceed();
        }

    在配置文件注册该拦截器后,进行测试

  • 相关阅读:
    循环获取数据
    implode
    获取二维数组中的值
    根据id获取某一类的最大最小值
    array_column的作用
    用curl模拟夹带cookie的http请求
    phpunit——执行测试文件和测试文件中的某一个函数
    call_user_func
    9 [面向对象]-内置方法
    8 [面向对象]-反射
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/11279345.html
Copyright © 2011-2022 走看看