Jfinal中 paginate

进行分页时,库里的数据本来有1000条,但是经过DeBug之后发现,使用该发方法进行分页之后,查询出来的数据有1059条,莫名其妙的读出来59条空数据,JSP页面也多出来了3页空数据页,改用List查询后转Page这个Bug就会消失,数据显示正常


                Page<Record> pagess = Db.paginate(pageNumber, PAGESIZE, select, sql,params.toArray());

这是修改之前的

                List<Record> pages =Db.find(select+sql,params.toArray()); 

//总页数

Integer totalPage = pages.size()%PAGESIZE == 0 ? pages.size()/PAGESIZE:pages.size()/PAGESIZE+1;

Page<Record> page = new Page<Record>(pages, pageNumber, PAGESIZE, totalPage, pages.size());

这是修改之后的,修改之后的处理时间会变得非常慢,加载需要10秒多


请问这种情况怎么办?

评论区

杜福忠

2019-07-08 12:39

看着写法有点怪, 可能是代码不全的原因, 还有SQL也没有贴, 有点难猜. 看看官网的例子写法:
http://www.jfinal.com/download/?file=jfinal-4.3_demo.zip

Miii

2019-07-08 14:17

String select = "select distinct s.ID,s.EXAM_NUM,s.NAME,s.ID_NUM ";
String sql = " from STUDENT s "
+ "left join (select distinct CODE,NAME from COLLEGE) b on s.COLLEGE_CODE = b.CODE "
+ "left join (select distinct CODE,NAME,XZ from MAJOR) c on s.MAJOR_CODE = c.CODE "
+ "left join (select distinct CODE,NAME from CLASSES) d on s.CLASSES_CODE = d.CODE "
+ "where s.EXAM_NUM in (select EXAM_CODE FROM PAYMENT_STUDENT where YEAR = ?) ";
List params = new ArrayList();
params.add(year);
if (StrKit.notBlank(year)) {
sql += " and s.YEAR = ? ";
params.add(year);
}
if (StrKit.notBlank(xyCode)) {
sql += " and s.COLLEGE_CODE = ? ";
params.add(xyCode);
}
if (StrKit.notBlank(zyCode)) {
sql += " and s.MAJOR_CODE = ? ";
params.add(zyCode);
}
if (xzCode != null && xzCode != 0) {
sql += " and c.XZ = ? ";
params.add(xzCode);
}
if (StrKit.notBlank(bjCode)) {
sql += " and s.CLASSES_CODE = ? ";
params.add(bjCode);
}
if (StrKit.notBlank(ksh)) {
sql += " and s.EXAM_NUM like ? ";
params.add("%" + ksh + "%");
}
if (StrKit.notBlank(lqh)) {
sql += " and s.ENROLL_NUM like ? ";
params.add("%" + lqh + "%");
}
if (StrKit.notBlank(sfzh)) {
sql += " and s.ID_NUM like ? ";
params.add("%" + sfzh.trim() + "%");
}
sql += "order by s.EXAM_NUM asc";
List pages =Db.find(select+sql,params.toArray());

Miii

2019-07-08 14:17

这是SQL代码

chcode

2019-07-08 19:38

不想看了

JFinal

2019-07-08 22:43

@Miii 这样大段的 sql 应该使用 sql 模板进行管理:
https://www.jfinal.com/doc/5-13

有关分页的问题,一定要看文档,里面针对各种问题做了解答:
https://www.jfinal.com/doc/5-6

如果是查询、分页慢的问题,用 mysql 的 explain 命令检查查询是否是在 "索引" 上进行的,否则如果数据量大肯定慢,只要是大数据量的全表扫描必然慢

注意:查询慢的问题必然与 jfinal 无关,因为 jfinal 只是将你的 sql 与 para 直接扔给了底层的 JDBC,并不会对你的 sql 有过多干预

JDBC 层面都慢了,那么只能优化 sql 或者索引

Miii

2019-07-09 08:35

@JFinal 好的,谢谢

热门反馈

扫码入社