JFinal4.9,Dialect.java中第270行,Holder正则表达式

JFinal4.9,Dialect.java中第270行有BUG:

image.png

问题描述:此方法连带“)”也支除了,导致SQL出错。

image.png

sql:

FROM (SELECT * FROM user ORDER BY create_time) AS t

执行结果:

FROM (SELECT * FROM user  AS t

目前解决办法:create_time),)前面添加空格。

此问题是Holder中正则表达式的问题

评论区

zzutligang

2020-07-27 14:11

String的replaceAll已经惹了很多祸了!我是自己又封装了一个replaceAll和replaceFirst这两个函数。

JFinal

2020-07-27 14:29

为了权衡得失,有些类型的 order by 是移除不干净的,这里已经说明了原因:
https://jfinal.com/doc/5-6

解决办法是使用 paginateByFullSql(...), 也即再多提供一条 sql

听风道长

2020-07-27 16:12

@zzutligang 厉害了,方便发出来学习一下么?

听风道长

2020-07-27 16:14

@JFinal paginateByFullSql没有用过,它的totalRowSql不支持paras吧?

JFinal

2020-07-28 22:49

@听风道长 paginateByFullSql 相当于将计算总记录数的 sql 与获取数据的 sql 全交给你自己指定, jfinal 不干预分页,理论上来说是可以的

其实,你还可以通过使用 jfinal 现有的 Db.queryInt(...) 以及 Db.find(...) 这两个方法自己组合实现分页功能,来针对当前 jfinal 不能满足需求的情况