sql管理语句只能执行基础的 select* from table???

java:

image.png

sql定义:

    #sql("findById")    

        SELECT 

        c.*,

        IF(c.user_id = #para(userId),1,0) optFlag

        FROM comment c 

        WHERE c.url_id = #para(urlId)

    #end

结果(报错):

Parameter index out of range (2 > number of parameters, which is 1).

疑问?

反复测了一下,select里面不能直接写参数para,一定要在where后面写才行?,子查询也不支持喽?几百行的sql使用jfinal根本没戏了???

评论区

JFinal

2019-01-10 15:24

外面套一个 select * from ( 原 sql ) as temp 即可

sql 要多复杂就可以有多复杂,因为你的 sql 是直接扔给 JDBC 执行的, jfinal 可不管你的 sql 有多复杂这件事

此外,你没仔细看文档,这个事文档里面早就详细说明过:
https://www.jfinal.com/doc/5-6

注意看常见问题部分

1174133584

2019-01-10 15:28

@JFinal 感谢解答,这个文档我看过两遍了~,你说的这个方法我看有人说不好使就没尝试,我现在去尝试一下!

1174133584

2019-01-10 15:30

@JFinal 感谢!已经可以了!

JFinal

2019-01-10 15:32

@1174133584 本质上来说:
1:分页需要得到 totalRow、totalPage,也就是当前你这个 sql 分页时要得到总记录数与总页数,那么 jfinal 需要生成一条 sql 来获取

2:生成的这条 sql 就需要将你的 select 部分给替换成 select count (*) 语句,这样就会丢失掉你在 select 中带的一些参数

3:jfinal 以前的版本曾经试图用正则替换来精准解决这个问题,但性能差了两个数量级,权衡下,提供了 paginateByFullSql 以及文档说明来辅助大家来解决

1174133584

2019-01-10 15:38

@JFinal 哦哦原来如此,明白了,十分感谢!