这篇文章主要是自己巩固一下RuoYi使用到的分页startPage
-------------------------------------------------------------------------------------------------------------------
介绍
主要分为是否前端有传分页信息进行区别
前提=》controller需要继承BaseController,因为它有startPage方法进行分页
再往下面解析,就是PageUtils实际调用的是PageHelper
--------------------------------------------------------------------------------------------------------------------
使用
startPage会实现自动分页,所以不需要做太多的操作
前端
使用Get请求把数据通过url传递给后端
后端
一.先通过url获取参数进行分页流程
第一步:ServleUtils通过getParameter获取url参数
第二步:我们在TableSupport可以看到getPageDomain方法进行设置第一步拿到的分页参数。
【注意:pageNum默认是1,pageSize默认是10】
第三步:TableSupport内还有一个下面这个方法,也就是可以通过这个方法来获取已经封装好的PageDomain对象
第四步:【根据介绍我们知道startPage调用了PageUtils的startPage方法 】
在下面红圈圈内的语句就是调用了第三步的方法获取封装好的PageDomain对象
最后把数据塞给PageHelper来分页
二、接着mybatis执行了啥??
第一步:首先执行count进行数据条数统计
第二步:接着通过上面获取的分页参数进行limit分页
三、最后返回TableDataInfo对象
我们要知道
结果 = startPage(分页方法) + TableDataInfo(view对象)
----startPage我们上面一直都在说
-----那getDataTable其实会封装TableDataInfo对象
问题来了:为什么要TableDataInfo????
看看里面多全啊,那我们就不要自己再封装total、状态码啊,很方便!!
容易踩坑
1.修改数据库
可以去官网看看怎么改,默认是mysql
丢个链接吧点一下 =》 后台手册 | RuoYi
2.为什么分页没效果
startPage只对该语句以后的第一个查询(Select)
语句得到的数据进行分页
如下
3、这里有个官方写的线程不可用情况
注意:
只要你可以保证在
PageHelper
方法调用后紧跟MyBatis
查询方法,这就是安全的。因为PageHelper
在finally
代码段中自动清除了ThreadLocal
存储的对象。 如果代码在进入Executor
前发生异常,就会导致线程不可用,这属于人为的Bug
(例如接口方法和XML
中的不匹配,导致找不到MappedStatement
时),这种情况由于线程不可用,也不会导致ThreadLocal
参数被错误的使用。
其实这段话我也是贴官方写的,如果有大佬可以说的更好,欢迎留言,感谢感谢!!!