实现Interceptor接口:
public Object plugin(Object target) {
System.out.println("first Intercept.....plugin"+target);
Object wrap=Plugin.wrap(target, this);
return wrap;
}
@Override
public Object intercept(Invocation invocation) throws Throwable {
// TODO Auto-generated method stub
System.out.println("first Intercept"+invocation.getMethod());
Object proceed = invocation.proceed();
return proceed;
}
@Override
public void setProperties(Properties properties) {
// TODO Auto-generated method stub
System.out.println("插件配置信息"+properties);
}
在mybatis.xml中配置插件信息:
<configuration>
<plugins>
<plugin interceptor="com.uban.mybatis.test.TestPlugin">
<property name="username" value="root"/>
</plugin>
</plugins>
执行程序后,sql的信息会被拦截下来:
插件配置信息{username=root}
first Intercept.....pluginorg.apache.ibatis.executor.CachingExecutor@2ea227af
first Intercept.....pluginorg.apache.ibatis.scripting.defaults.DefaultParameterHandler@17046283
first Intercept.....pluginorg.apache.ibatis.executor.resultset.DefaultResultSetHandler@6e4784bc
first Intercept.....pluginorg.apache.ibatis.executor.statement.RoutingStatementHandler@e056f20
DEBUG 03-08 14:33:27,577 ==> Preparing: select * from employee where id=?
public Object intercept(Invocation invocation) throws Throwable {
// TODO Auto-generated method stub
System.out.println("first Intercept"+invocation.getMethod());
Object target = invocation.getTarget();
MetaObject metaObject = SystemMetaObject.forObject(target);
Object value = metaObject.getValue("parameterHandler.parameterObject");
metaObject.setValue("parameterHandler.parameterObject", 3);
System.out.println("sql参数"+value);
Object proceed = invocation.proceed();
return proceed;
}
更改sql的参数:
参数被修改,返回值改变
pagehelper分页插件:
在mybatis.xml中配置:
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
</plugin>
</plugins>
调用时,只需要加入PageHelper.startPage(1,2); 就可以了
public void test00() throws IOException {
SqlSession opensession=getSqlSessionFactory().openSession();
EmployeeMapperPlus mapper=opensession.getMapper(EmployeeMapperPlus.class);
Page<Object> page = PageHelper.startPage(1,2);
List<Employee> employee=mapper.getEmps();
for(Employee e:employee) {
System.out.println(e);
}
System.out.println(page.getPageNum()+""+page.getTotal()+""+page.getPageSize());
opensession.close();
}