(一)实现Interceptor 接口
-
拦截器中的方法
intercept:拦截的核心方法(在这里面实现相应的功能)
plugin:必需 return Plugin.wrap(o, this); 代表对于签名(在类上面的注解中)的拦截
setProperties:获取拦截器配置的参数 -
签名
type:对应的类(Executor.class,ResultSetHandler.class,ParameterHandler.class,StatementHandler.class) 但是一般只用 Executor.class
method:type类中的方法名,我们一般只用 Executor.class中的update(增删改)与query(查询)
args:参数(方法中的参数类型)
//我要拦截增删改的功能
@Intercepts(
//签名
@Signature(
type= Executor.class,
method = "query",
args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}
)
)
public class HelloInterceptor implements Interceptor {
/**
* 拦截器的核心方法(要做的事情是在这里完成的)
* @param invocation
*/
@Override
public Object intercept(Invocation invocation) throws Throwable {
System.out.println("方法:"+invocation.getMethod());
System.out.println("对象:"+invocation.getTarget());
System.out.println("参数:"+invocation.getArgs());
//执行相应的方法
Object result = invocation.proceed();
return result;
}
/**
* 对哪些【签名】进行拦截(放行)
* 哪些操作(修改与查询)会经过咱们的拦截方法:intercept
* @param o
* @return
*/
@Override
public Object plugin(Object o) {
return Plugin.wrap(o, this);
// return o;
}
/*
<Interceptor>
<param key="dbType" value="Oracle"></pram>
</Interceptor>
*/
//接收参数
@Override
public void setProperties(Properties properties) {
String dbType = properties.getProperty("dbType");
System.out.println(dbType);
}
}
(二)拦截器的配置
mybatis-config.xml
<!--插件配置(拦截器配置)-->
<plugins>
<plugin interceptor="cn.itsource._02_generator.interceptor.HelloInterceptor">
<property name="dbType" value="mySql" />
</plugin>
</plugins>
(三)分页插件(拦截器)
- 引入插件
pom.xml
<!-- 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.0</version>
</dependency>
- 插件配置
mybatis-config.xml中
<plugins>
<!--配置分页插件-->
<plugin interceptor="com.github.pagehelper.PageInterceptor" />
</plugins>
- 测试
@Test
public void testPage() throws Exception{
//分页 pageNum:第几页 pageSize:每页条数
PageHelper.startPage(1, 10);
SqlSession session = MyBatisUtil.openSession();
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
List<Employee> employees = mapper.selectAll();
Page page = (Page) employees;
System.out.println("第几页:"+page.getPageNum()); //第几页
System.out.println("总页数:"+page.getPages()); //总页数
System.out.println("总条数:"+page.getTotal()); //总页数
System.out.println("结果:"+page.getResult());
page.getResult().forEach(e -> System.out.println(e));
}