我在使用JFinal自带的paginate进行分页的时候,如果不带order by 字句,什么都很正常,如果带了order by就会发生一些数据丢失。
具体表现就是一共25条数据,每页最大显示20条,他会按两页显示,条数也对,但两页中会有重复数据,同时就有一些数据没有显示出来。
我是想根据查询出来的某一字段进行排序,这一字段是计算出来并不是表中本身就有的字段。
使用paginateByFullSql这个方法也同样没有解决问题。不知是我哪里设置的不对了,还望指点一下!谢谢!
paginateByFulSql 本质上只是用于复杂 order by 的情况,例如下面这种情况:
select * from xxx where ... order by ( select yy from ...) as temp
由于分页查询需要用 select count(*) from (原 sql) as temp 去计算总记录条数,而 count(...) 函数不能与 order by 同时存在,所以需要针对 select count(*) 这个查询去掉 order by 子句
问题在于 order by 可以是无限复杂的嵌套 sql,以至于要用正则彻底覆盖所有 order by 所有模式的情况会让程序性能下降一至两个数量级
因此,为了权衡性能与便利性,paginate 方法中的正则仅匹配移除最常用的 order by 模式,而 paginateByFullSql 专门针对无法彻底移除 order by 的情况而生