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

  1. #sql("find")
  2. select * from report re
  3.  
  4.       #for(x : cond)
  5.          #(for.index == 0? "where" : "and")
  6.        
  7.       #if(x.key=="title")
  8.         re.title like concat('%',#para(x.value), '%')
  9.       #else
  10.           #(x.key)  #para(x.value)
  11.         #end
  12.         
  13.         
  14.       #if(x.key=="type")
  15.           re.type like concat('%',#para(x.value), '%')
  16.           
  17.       #else
  18.           #(x.key)  #para(x.value)
  19.         #end   
  20.           
  21.           
  22.           
  23.       #if(x.key=="author")
  24.           re.author like concat('%',#para(x.value), '%')
  25.           
  26.       #else
  27.           #(x.key)  #para(x.value)
  28.         #end   
  29.           
  30.       #if(x.key=="content")
  31.           re.content like concat('%',#para(x.value), '%')
  32.       #else
  33.           #(x.key)  #para(x.value)
  34.         
  35.       #end
  36.       #end
  37.     
  38. #end

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

  1. public void find() {
  2.     Record r = getArgsRecord();
  3.         
  4.         HashMap<String, String> cond = new HashMap<String, String>();
  5.         if (StrKit.notBlank(r.getStr("title"))) {
  6.             cond.put("title",r.getStr("title"));
  7.         }
  8.         if (StrKit.notBlank(r.getStr("type"))) {
  9.             cond.put("type",r.getStr("type"));
  10.         }
  11.         if (StrKit.notBlank(r.getStr("author"))) {
  12.             cond.put("author",r.getStr("author"));
  13.         }
  14.         if (StrKit.notBlank(r.getStr("content"))) {
  15.             cond.put("content",r.getStr("content"));
  16.         }
  17.         
  18.         List<Record> list = Db.template("find", cond).find();
  19.  
  20.         System.out.println(list);
  21.  
  22.         renderJson(list);
  23.  
  24.     }

然后就是只执行一句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注入了

热门反馈

扫码入社