2017-09-14 09:57
分页查询中如果使用 order by 只要是没有报异常,结果一定是正确的,当然这个结果取决于你的 sql 是否正确
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 的情况而生
2017-09-14 09:49
代码走到 #include 一个 html ,表明已经在渲染当前页面,这个时间点与 render 方法就没有关系了,点击一个按钮,刷新数据是发起的另一次新的请求,用 ajax 可以实现
jfinal.com 官方是这么实现的:
1:在第一个 action 中先渲染出整个页面
2:在需要动态的地方,使用 ajax 向某个 action 发起请求,假定该 action 叫 item()
3:做一个 _item.html 页面,仅仅渲染出页面需要更新的那一个小片段
4:在 item() 这个 action 中 render("_item.html") 响应 ajax 请求
5: ajax 请求将获取到的 html 片段,用 insert 插入到页面指定的地方,替换掉原来的老数据也可以
建议加入俱乐部,现成的代码可使用,省下的钱数倍于加入club的投资
2017-09-14 00:22
@lyleluo 半天没反应,数据是否有部分存进去? 将 batchSize 设置小点,如 3000 试试
2017-09-14 00:01
@li_ms 在 public void afterJFinalStart() 中做这个事合适,具体用法见 jfinal 手册
2017-09-13 23:55
@yjjdick1990 搞清楚数据存放在哪里,从哪取过来,这才是本质问题,具体怎么操作都是细枝末节