在SQL模板里嵌套使用#para(...)出错的问题

查询方法:

Kv paras = Kv.by("uid", uid).set("mtype", mtype);
SqlPara sqlPara = Db.getSqlPara("getUnreadList", paras);
return Db.find(sqlPara);

查询时,传入的两个参数:uid(必填)、mtype(可选)

按照正常理解写出的SQL模板:

#sql("getUnreadList")
    SELECT * FROM msg_recive
    WHERE userId = #para(uid) AND readed = 0
    #if(para(mtype) != null) AND mtype = #para(mtype) #end
#end


运行出错:

Shared method not found: para(java.lang.Integer)

原来在 #if(...) 里面引用参数时,不能使用 para(...) 的方式,而是直接写参数名

但在外面引用参数,还是要 #para(...),有点诡异~

按照这种逻辑,如果传参时使用的是“int型常量”方式,不知道如何在 #if(...) 里引用?

还是建议老大能够统一习惯,否则真有些不适应

评论区

天朝子民

2018-09-19 11:14

可以尝试适应jfinal,而不是让jfinal适应你。
如果传参时使用的是“int型常量”方式,不知道如何在 #if(...) 里引用?
--见:http://www.jfinal.com/feedback/1975

JFinal

2018-09-19 11:22

#para(...) 这个是指令,不是 shareMethod,只有 sharedMethod 才可以这么用:
#if ( methodName(...))

建议先多看看文档,既节省你的时间,又节省大家时间,都是文档中说得清清楚楚的问题,其中有红色字体早就告诉了你想要的这个功能

JFinal

2018-09-19 11:23

一定要分清指令、共享方法的区别,前者前方带个字符 '#', 后者在表达式中使用

netwild

2018-09-19 12:36

@JFinal 是我疏忽了,一时没注意 #para() 是指令~
看来我需要自己写一个 para() 的 shareMethod,就符合自己的习惯了
感谢老大~!

netwild

2018-09-19 12:47

@天朝子民
对于谁适应谁的问题,我认为首先当然是先学习jf的理念,但最终还是基于jf良好的开放性进行扩展,打造最适合自己的脚手架。
这个问题确实是我疏忽,没注意 #para 是指令。
还是谢谢你的链接,已经学习!

热门反馈

扫码入社