• 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();
        }

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

  • 相关阅读:
    block
    最短路径(图论-北京地铁线路查询)
    Linux与git使用引导(git rm 与rm命令)
    Linux、vim、Makefile-操作系统lab0
    2019-BUAA-OO-第一次作业(表达式函数求导)
    1064
    Navicate 连接mysql问题
    pypi上传问题
    pypi上传命令
    关于 List add方法
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/11279345.html
Copyright © 2020-2023  润新知