Jfinal中的Sql文件只执行前面一句后面的不执行

#sql("find")
select * from report re

      #for(x : cond)
         #(for.index == 0? "where" : "and")
       
      #if(x.key=="title")
        re.title like concat('%',#para(x.value), '%')
      #else
          #(x.key)  #para(x.value)
        #end
        
        
      #if(x.key=="type")
          re.type like concat('%',#para(x.value), '%')
          
      #else
          #(x.key)  #para(x.value)
        #end   
          
          
          
      #if(x.key=="author")
          re.author like concat('%',#para(x.value), '%')
          
      #else
          #(x.key)  #para(x.value)
        #end   
          
      #if(x.key=="content")
          re.content like concat('%',#para(x.value), '%')
      #else
          #(x.key)  #para(x.value)
        
      #end
      #end
    
#end

sql模板就这样,然后就是调用

public void find() {
    Record r = getArgsRecord();
        
        HashMap<String, String> cond = new HashMap<String, String>();
        if (StrKit.notBlank(r.getStr("title"))) {
            cond.put("title",r.getStr("title"));
        }
        if (StrKit.notBlank(r.getStr("type"))) {
            cond.put("type",r.getStr("type"));
        }
        if (StrKit.notBlank(r.getStr("author"))) {
            cond.put("author",r.getStr("author"));
        }
        if (StrKit.notBlank(r.getStr("content"))) {
            cond.put("content",r.getStr("content"));
        }
        
        List<Record> list = Db.template("find", cond).find();

        System.out.println(list);

        renderJson(list);

    }

然后就是只执行一句sql查询所有,按条件模糊查询的话,一直查出来所有,代码哪里有问题吗,大佬,帮忙看一下

评论区

MR.zhangzhiwei

2019-06-26 11:23

@JFinal 波总,求助

l745230

2019-06-26 14:04

这sql模板用的也太丑了吧. 一共就传了4个参数,还用for来循环参数, 4个if判断. 谁教你这么用的...

MR.zhangzhiwei

2019-06-26 14:06

@l745230 不用四个if用ifelse结果一个样啊

l745230

2019-06-26 14:06

另外,优雅的在sql管理中写like语句 https://www.jfinal.com/share/398

l745230

2019-06-26 14:09

@MR.zhangzhiwei 没你这样用的,人家用for是来搞通用模板,你这用法硬是搞成四不像,还不如好好的写sql,然后将参数改为动态的

MR.zhangzhiwei

2019-06-26 14:09

MR.zhangzhiwei

2019-06-26 14:20

@l745230 传参数用Map不可以吗,我用Map传进去还是需要判断啊,怎么让他不循环呢

要输就输给追求

2019-06-26 14:21

你这么写,生成的sql语句都不对吧。你可以单步调试看看你的sql。

MR.zhangzhiwei

2019-06-26 14:24

@l745230 可以了,大佬666

MR.zhangzhiwei

2019-06-26 15:09

@l745230 怎么防止Sql注入问题呢

l745230

2019-06-27 08:15

@MR.zhangzhiwei 用enjoy生成的sql,是使用?占位符的方式,本身就已经是防止sql注入了

热门反馈

扫码入社