微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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代理

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐