mybatis中的分页插件原理过程说明

首先了解一下mybatis到底帮了我们做了哪些事
1,封装jdbc操作
2,利用反射将java对象与sql语句之间的互相转换。

mybatis的架构设计:
1、接口层
2、数据处理层 参数映射,通过parameterHandler,sql解析通过sqlSource ,sql执行通过executor,结果处理和映射通过ResultSetHandler
3、框架支撑层

mybatis执行sql的执行流程:
1,通过输入流的方式加载全局配置文件mybastis-config.xml文件
2, 将返回的输入流通过sqlSessionFactoryBuilder 解析生成sqlSessionFactory (这里mybatis用到了构建者模式)
3,通过sqlSessionFactory调用 openSession()方法打开创建sqlSession对象
4,获取到sqlSession对象
5,得到执行器Executor,接着执行jdbc相关操作
6,StatmentHandler,会将sql执行的参数代入方法中。
7,处理返回的结果集ResultSetHanler 返回ResultSet

手写mybatis分页插件过程:(mybatis插件又称拦截器 )
1,在mybatis.config配置文件中添加
<plugin>插件信息...</plugin>
2, 通过跟踪源码,我们可以发现mybatis在StatementHandler执行插件方法,所以我们手写的插件在StatementHandler这个进入插入。
mybtatis使用了jdk接口代理,cglib代理需要引入新jar包
3, 添加插件代码,创建myPagePlugin类
一:分页插件需要实现intercepter
二:分页插件需要用到的一些注解和注释
@Intercepts插件注解
@Signature(type="StatementHanlder.class,指明自定义拦截器需要拦截哪一个类型
method=“prepare” 对插件需要拦截的对象和方法进行拦截
args=(connection.class,…)被拦截方法的参数

插件内部需要重写有三个方法:
1、intercepter() 插件的核心业务
一、拿到原始sql, 二、查询sql数据总数 三,改造sql,添加limit关键字和分页参数实现分页。
ps:在executor被代理后, 会继续执行查询动作, 这时就会被interceptor拦截了.
设置只有指定byPage方法的才需要进行
2、pluginObject() 将自定义的插件加入到mybatis中执行
3、setProperties()设置分页的一些属性参数
到此分页插件的所有工作已经完成。

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值