对分页的改进建议

现有的分页都是基于pageSize和pageNumber的

实际前台需要的数据可能是基于start和end的(offset,limit)

我看Dialect下面的实现好像基本上也都是把pageSize和pageNumber先转成了start和end再处理,这不是有点多余么

而且当(end-start)不能被start整除的时候根本无法转成对应的pageSize和pageNumber

未来能否多提供一个基于start和end的分页接口?

评论区

JFinal

2017-03-19 17:43

通常希望通过希望页号 pageNumber 与 pageSize 这两个参数获取数据的需求更多,也更直观,offset limit 这两个参数在本质上与 pageSize 和 pageNumber 是等价的,可以通过计算去互相转换,所以更多是从需求强烈程度去考虑这个设计

当然 offset limit 这个需求可能也是存在的,至少从这几年实践的角度来看,需求并不强烈

未来是否提供 start 和 end 分页接口取决于需求的强烈程度,目前是建议通过 baseModel 去扩展,因为只需要将 offset limit 计算转换成 pageNumber、pageSize 就可以重用现在已有的 API 去实现功能

英俊的小铁匠

2017-03-20 16:28

@JFinal 前台如果传pageNumber和pageSize是很好计算offset和limit的,而且结果必然准确无误,但前台如果传的是offset和limit,后台想计算pageNumber和pageSize的时候则有可能面临除不尽的情况(比如offset=11,limit=7)

英俊的小铁匠

2017-03-20 16:29

@JFinal 总的来说后台用offset和limit是可以兼容两种情况,用pageNumber和pageSize则只能应付一种

JFinal

2017-03-20 18:54

@英俊的小铁匠 用 offset limit 对于 API 的使用者并不是最方便的,API 的使用者心中多数是安放着自己的需求,例如使用者心中想着想跳到第 N 页,但如果提供的是 limit 那么则需要使用者先计算一次才能使用该 API

JFinal

2017-03-20 18:57

@英俊的小铁匠 除不尽的情况是正常的,例如 offset=11,limit=7,就是第二页,因为第一页是 1,2,3,4,5,6,7,第二页是 8,9,10,11,12,13,14,那么 offset=11 处于第二页

英俊的小铁匠

2017-03-21 09:40

@JFinal 没说把原有的去掉啊,就是内部提供两个接口,底层用offset+limit实现,使用者调pageNumber+pageSize的接口自动给他换算成offset+limit不就行了

英俊的小铁匠

2017-03-21 09:44

@JFinal 调用者想返回的是11-18,而用pageNumber+pageSize只能给他返回8-14

英俊的小铁匠

2017-03-21 10:33

@JFinal jquery、extjs、dojo的分页参数都是基于offset+limit的……

JFinal

2017-03-21 14:56

@英俊的小铁匠 你的建议已经添加到了改进列表之中,后续如果有两到三个人提出同样的需求会考虑添加该 API,感谢你的反馈

qiushui90

2017-03-22 23:19

我今天也遇到同样的问题,通过写一个BaseController,统一处理了这个limit跟offset,在controller中getPagePara拿到pageNumber跟pageSize

JFinal

2017-03-23 10:33

@英俊的小铁匠 @qiushui90 突然想到 offset limit 仅为实现分页的一个手段,例如,通过 pageNumber 与 pageSize 计算出 offset 与 limit 值,再通过这两个值去数据库查询实现分页功能

而如果碰到 offset limit 这种 API 需求时,根本不需要再计算,那么可以直接用 find 方法即可:
find("select * from xxx where ... offset m limit n", ...)

chcode

2020-09-24 16:33

@JFinal 我今天也遇到了类似的需求

热门反馈

扫码入社