Mybatis拦截器(一)
拦截器需要实现 interceptor接口
public interface Interceptor {
//3 对目标对象拦截进行处理的内容
Object intercept(Invocation invocation) throws Throwable;
//2 确定是否执行拦截并返回一个拦截对象 拦截器连InterceptorChain 会根据返回的值执行
//调用Proxy.newProxyInstance(type.getClassLoader(),interfaces,new Plugin(target, interceptor, signatureMap));
// 创建代理对象 Object plugin(Object target);
// 1 setProperties方法是用于在Mybatis配置文件中指定一些属性的
void setProperties(Properties properties);
}
拦截器执行顺序:
1 先执行setProperties
<plugin interceptor="com.tiantian.mybatis.interceptor.MyInterceptor">
<property name="prop1" value="prop1"/>
<property name="prop2" value="prop2"/>
</plugin>
根据property 属性设置setProperties
2 新建可拦截对象的时候会调用plugin方法来决定是返回目标对象本身还是代理对象。
3当StatementHandler 代理对象在执行方法prepare参数类型为java.sql.Connection.class 的时候就会触发当前的拦截器的intercept方法进行拦截
最后执行intercept
拦截器注解:
@Intercepts({@org.apache.ibatis.plugin.Signature(type=StatementHandler.class, method="prepare", args={java.sql.Connection.class})})
当mybatis是 的时候返回代理对象,其他返回目标对象
type:是要拦截的对象 ,method 拦截什么方法,args 方法的参数是什么
mybatis 能拦截以下四个对象: Executor, StatementHandler,ParameterHandler,ResultHandler对象
Executor:
(1、根据传递的参数,完成SQL语句的动态解析,生成BoundSql对象,供StatementHandler使用;
(2、为查询创建缓存,以提高性能;
(3、创建JDBC的Statement连接对象,传递给StatementHandler对象,返回List查询结果。
StatementHandler :就是和数据库对话
(1、当我们需要改变sql的时候,显然我们要在预编译SQL(prepare方法前加入修改的逻辑),功能:分页,机构过滤等需要修改原始sql
(2、当我们需要修改参数的时候我们可以在调用parameterize方法前修改逻辑。或者使用ParameterHandler来改造设置参数。
ParameterHandler
(1、ParameterHandler是用来设置参数规则的,setParameters()是设置参数的,相当于对一条sql所有的参数都执行ps.setXXX(value);
ResultHandler:将sql执行返回的结果封装转换为java实体类
Mybatis拦截器(一)的更多相关文章
- Mybatis拦截器
Mybatis拦截器
- Mybatis拦截器 mysql load data local 内存流处理
Mybatis 拦截器不做解释了,用过的基本都知道,这里用load data local主要是应对大批量数据的处理,提高性能,也支持事务回滚,且不影响其他的DML操作,当然这个操作不要涉及到当前所lo ...
- MyBatis拦截器原理探究
MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis 允 ...
- Mybatis拦截器介绍
拦截器的一个作用就是我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可以在执行这些被拦截的方法时执行自己的逻辑而不再执行被拦截的方法.Mybatis拦截器设计的一个初 ...
- Mybatis拦截器实现分页
本文介绍使用Mybatis拦截器,实现分页:并且在dao层,直接返回自定义的分页对象. 最终dao层结果: public interface ModelMapper { Page<Model&g ...
- 数据权限管理中心 - 基于mybatis拦截器实现
数据权限管理中心 由于公司大部分项目都是使用mybatis,也是使用mybatis的拦截器进行分页处理,所以技术上也直接选择从拦截器入手 需求场景 第一种场景:行级数据处理 原sql: select ...
- 基于Spring和Mybatis拦截器实现数据库操作读写分离
首先需要配置好数据库的主从同步: 上一篇文章中有写到:https://www.cnblogs.com/xuyiqing/p/10647133.html 为什么要进行读写分离呢? 通常的Web应用大多数 ...
- 通过spring抽象路由数据源+MyBatis拦截器实现数据库自动读写分离
前言 之前使用的读写分离的方案是在mybatis中配置两个数据源,然后生成两个不同的SqlSessionTemplate然后手动去识别执行sql语句是操作主库还是从库.如下图所示: 好处是,你可以人为 ...
- 【Mybatis】1、Mybatis拦截器学习资料汇总
MyBatis拦截器原理探究 http://www.cnblogs.com/fangjian0423/p/mybatis-interceptor.html [myBatis]Mybatis中的拦截器 ...
- spring boot 实现mybatis拦截器
spring boot 实现mybatis拦截器 项目是个报表系统,服务端是简单的Java web架构,直接在请求参数里面加了个query id参数,就是mybatis mapper的query id ...
随机推荐
- js 简易年历
html部分 <div class='calendar'> <div class="tabBox" id='nav' > <ul> <li ...
- 怎样从外网访问内网Apache HTTP Server
本地安装了一个Apache HTTP Server,只能在局域网内访问,怎样从外网也能访问到本地的Apache HTTP Server呢?本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
- Centos下10000次循环测试php对Redis和共享内存(shm)读写效率
redis和memcache还有共享内存都是读取内存的数据,为了测试一下到底效率谁更胜一筹,我在我的Centos虚拟机下做了一次公平的测试. 测试参数 环境:Centos (配置忽略).语言:PHP. ...
- nGrinder Maven工程使用
1:新建Maven groovy工程 2:SVN Checkout Maven工程 3:新建JUnit脚本,并运行,提示报错 java.lang.RuntimeException: Please ad ...
- 02: djangorestframework使用
1.1 djangorestframework登录.认证和权限 1.认证与权限相关模块 # -*- coding: utf-8 -*- from django.utils import six fro ...
- metasploit(MSF)对windows的ms17-010漏洞利用
picture 配置exploit msf > use exploit/windows/smb/ms17_010_eternalblue msf exploit(windows/smb/ms17 ...
- Qone 自动删除说说脚本
请看图 script var delay = 1000; function del() { document.querySelector('.app_canvas_frame').contentDoc ...
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) Problem C (Codeforces 828C) - 链表 - 并查集
Ivan had string s consisting of small English letters. However, his friend Julia decided to make fun ...
- Python中的对象行为与特殊方法(二)类型检查与抽象基类
类型检查 创建类的实例时,该实例的类型为类本身: class Foo(object): pass f = Foo() 要测试实例是否属于某个类,可以使用type()内置函数: >>> ...
- 展讯7731C_M Android6.0 充电指示灯实现(一)------关机充电实现【转】
本文转载自:https://blog.csdn.net/m0_37870649/article/details/80566131 前言: 在手机充电中常常使用充电指示灯来观察手机充电状态,比如说将手机 ...