jfinal3.1 关于SQL管理 IN语句问题

#sql("findUsers")
  SELECT * FROM sys_user u WHERE u.del_flag = #para(0) and u.user_id in (#para(1))
#end


SqlPara sqlPara = SysUser.dao.getSqlPara("user.findUsers", 0, "1,2");


第二个参数传入的是 1,2 这种组装好的 字符串,现象我只能查询到 user_id = 1的

image.png

两个参数被解析成三个,断点看了一下 paraList toString 就直接返回了,没有做处理啊,这样肯定有问题啊,请问波总 应该怎么解决呢?

评论区

小胖

2017-06-15 11:37

SELECT * FROM sys_user u WHERE u.del_flag = #p(flag) and u.user_id in (#(ids))
SqlPara sqlPara = SysUser.dao.getSqlPara("user.findUsers", Kv.by("flag",0).set("ids","1,2"));

giegie

2017-06-15 12:54

@小胖 这种形式也是存在 这个问题的

JFinal

2017-06-15 18:03

一个 #para(int) 指令只能输出一个问号占位,况且 jfinal 无法猜到你传入的 "1, 2" 这个 String 参数是一个整体还是两个分开的参数,也不方便去猜测,不严谨,因为 "1, 2" 这个 String 完全可以当成是一个参数

JFinal

2017-06-15 18:04

我记得 jfinal 手册上有一个例子可以满足你的需求,在 sql 模板中利用 #for 指令去输出就可以了

giegie

2017-06-15 23:51

@JFinal 嗯,看来只能使用 for 循环啦

kevin007

2017-12-07 13:01

我也遇到同样的问题,如果不循环,直接拼接好ids的话,传递进去只能查询出来第一个id的数据,后面的都被忽略了

JFinal

2017-12-07 17:35

@kevin007 关键点在于有多少个参数对应 in(...) 的参数,那么 in(...) 扩号中的问号个数要完全一致,这个是 JDBC 要求的,并不是 jfinal 制定的规则

热门反馈

扫码入社