JFinal 3.0 如何动态生成排序语句

#define getAndSql(cond)

#for(x:cond)

#if(x.value!=null&&x.value!="")

#if(x.key=="order")

order by #para(x.value)

#else

and #(x.key) 

#if(x.value=="null")

null

#else 

#para(x.value)

#end

#end

#end

#end

#end

生成排序语句后,进行分页操作时会无效的列索引错误

评论区

JFinal

2017-11-27 18:33

sql 有错误, order by 要放在最后面。

可以通过 activeRecordPlugin.setShowSql(true) 将 sql 输出到控制台,观察 sql 到底是什么样,将 sql 改对了就可以了

Yiww

2017-11-28 09:43

@JFinal select t.* from T_XX t where 1=1 order by ?
我的本意是使order by 后面的筛选项动态化,find方法不会报错,但出来的结果不是正确的(因为变成了order by '筛选项',而不是 order by 筛选项),paginate方法会报错。SqlPara sqlPara = Db.getSqlPara("xxx", Kv.by("cond", cond.set("order", "update_time")));

Yiww

2017-11-28 10:03

貌似order by 后面不支持占位符?,那使用3.x的Sql管理与动态生成功能,如何让order by 后面的筛选项动态化

JFinal

2017-11-28 11:13

@Yiww order by 不支持问号占位,这个是 JDBC 决定的,不是 jfinal 可能控制的。

order by 要动态,完全可以通过传参的方式, cond.set("order", "order by update_time desc, other_field asc")

然后在模板中用 #(order) 来输出即可

Yiww

2017-11-28 13:29

问题解决了。。谢波总。。@JFinal

zhang1232

2019-01-14 19:08

@JFinal 能具体点吗? 为什么我按你说的写 生产的sql 还是有问题,我在navicate运行过没问题呀

热门反馈

扫码入社