zoukankan      html  css  js  c++  java
  • Mybatis核心拦截器

    一:背景,

      很多业务场景下我们都需要拦截器sql,达到不入侵原有代码的业务处理一些东西,比如分页,数据权限过滤操作,Sql执行时间监控等等,这里我们就要用到Mybatis拦截器Interceptor 。

    Mybatis 的核心介绍

    • configuration.初始化基础配置,比如Mybatis的别名,一些重要的类型对象,Mybatis的所有的配置信息都维持在Configuration对象之中 。
    • SqlSessionfactory ,Sqlsession工厂。
    • Sqlsession 作为mybatis的工作的主要的顶层api ,表示何数据库交互的会话,完成必要数据库的增删查改的一些功能。
    • Executor Mybatis的执行器。是Mybatis调度的核心,负责sql语句的生成何查询缓存的威威。
    • StatementHandler 封装了JDBC Statement 操作。比如参数的设置,将state吗结果转化为list集合操作等等。
    • ParameterHandler 负责将JDBC返回参数转化为JDBC statment 的参数
    • ResultSethandler 负责将JDBC返回的Resultset集对象转化为list类型的集合
    • TypeHandler 负责将数据库的类型何实体类型之间的转化何映射
    • MappedStatement ,MappedStatement维护一条Select,update,delete,insert 节点的封装。
    • SqlSource 负责根据用户传递的parameterObject 动态的生成一条sql语句。
    • Sboundsql 表示动态生成的sql何对应的参数信息。

      

       Mybatis 的原理何实现

    • Mybatis 支持对Executor,StatmentHanderl ,Pameterhandler何ResultSethandler 接口进行拦截。也就是说会对四种对象进行代理。
    • 通过SqlSessionFactoryBean,
    • 拦截器 ,可以通过配置拦截器链,把将要拦截的任务放到相应的拦截器的下边以共他们取实现。
    • 自己对与拦截器的实现原理实现的猜想。
    • 从以下带么可以看出mybatis在实例化Executor ,ParameterHandler,resultsetHandler,StatementHanderls,在实例化四大接口对象的时候,就回调用interceptorChain.pluginAll() 方法插进去,其实就是循环执行拦截器链所有的连接的plugin()fangfa .
    • mybatis 官方推荐的方法是plugin方法是plugin.wrap()方法,这个类就是我们上表的TargetProxy代理

    我们自己实现拦截器的代码:

  • 相关阅读:
    3813: 奇数国|树状数组|欧拉函数
    利用Perlin nosie 完毕(PS 滤镜—— 分成云彩)
    Qt QImageReader 相似乎有bug
    android studio 更新Gradle版本号方法
    Junit测试
    POI导出
    Properties文件读取
    md5加密
    递归找出文件夹里面所有文件
    java FileReader/FileWriter读写文件
  • 原文地址:https://www.cnblogs.com/dousil/p/13198590.html
Copyright © 2011-2022 走看看