MyBatis拦截器

(一)实现Interceptor 接口

  1. 拦截器中的方法

    intercept:拦截的核心方法(在这里面实现相应的功能)
    plugin:必需 return Plugin.wrap(o, this); 代表对于签名(在类上面的注解中)的拦截
    setProperties:获取拦截器配置的参数

  2. 签名

    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>

(三)分页插件(拦截器)

  1. 引入插件

pom.xml

 <!-- 分页插件 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.0.0</version>
</dependency>
  1. 插件配置

mybatis-config.xml中

<plugins>
   <!--配置分页插件-->
   <plugin interceptor="com.github.pagehelper.PageInterceptor" />
</plugins>
  1. 测试
@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));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值