Jfinal Db.find使用sql语句in

_Roger_ 发布于 2016/08/15 13:24
阅读 5K+
收藏 0

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

@JFinal 你好,想跟你请教个问题:我想通过判断数据库表某一字段值是否在一个集合中,是不是只能通过类似Db.find("select * from xx in (?)", ?)这种方式实现呢,如果我传入的集合是字符串集合该怎么办,不会得手工把list拼接成 ("a", "b", "c")这种样子吧

加载中
0
JFinal
JFinal

   jfinal 是将 sql 与 para 直接扔给了 jdbc 去处理的,所以如下的方式才可以查询:

find("select * from t where id in(?,?,?)", 1,2,3);

   也就是说 in 里面有多少个参数就需要多少个问号,并且后面的 paras 的个数与问号相同,这个本质上是由 JDBC 决定的,jfinal 并未做任何干预

   在实际使用时直接将 in 后面的参数拼接好更方便,因为即便不拼接参数,但 in 后面的问号也要拼起来,所以索性拼参数更加方便,以下是 JFinal 社区拼接的工具类,可以参考一下:

public class SqlKit {
 //将 id 列表 join 起来,用逗号分隔,并且用小括号括起来
 public static void joinIds(List<Integer> idList, StringBuilder ret) {
  ret.append("(");
  boolean isFirst = true;
  for (Integer id : idList) {
    if (isFirst) {
      isFirst = false;
    } else {
      ret.append(", ");
    }
    ret.append(id.toString());
  }
  ret.append(")");
 }
}


王小蒙
王小蒙
开阔了新思路,,之前从来没想过这样写。。。都是生搬硬套
0
bTrees
bTrees

直接用双引号抱起来就行

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部