首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
关于dao的优化小建议
singno
2017-01-13 10:16
IN (?) 语句不能用?占位符传参,需拼接字符串,总感觉好奇怪,是我使用方式不对吗?
项目:
JFinal
评论区
Adam
2017-01-13 11:31
可以用,不过你必须要确保占位符和参数的数量一致。
回复
zempty
2017-01-13 12:30
In (?)然后你的变量是"1,2,3,4,5,6"。匹配的是这个字符串in ('1,2,3,4,5,6'),不是你要的in (1,2,3,4,5,6)
回复
lyh061619
2017-01-13 12:52
JFinal对占位符必然支持的,而你以上写法是有点点问题或都是没有了解清楚,我贴个码给你看看: public Page list(Integer p, Object... objects) {
if (sl.isEmpty(p) || p == 0) {
p = Const.Page.NUM;
}
String select = "";
String from = "";
StringBuilder sql = new StringBuilder();
String orderBy = "";
List
paras = new ArrayList<>();
if (sl.isEmpty(objects[0])) {
sql.append(" where 1=1");
}else if ((int)objects[0] == 5) {
sql.append(" where o1.status = 0");
} else {
sql.append(" where o1.status = ?");
paras.add(objects[0]);
}
if (!sl.isEmpty(objects[1])) {
sql.append(" and o1.number like ?");
paras.add("%" + objects[1] + "%");
}
if (!sl.isEmpty(objects[2])) {
sql.append(" and o2.name like ?");
paras.add("%" + objects[2] + "%");
}
if (!sl.isEmpty(objects[3])) {
sql.append(" and o1.type = ?");
paras.add(objects[3]);
}
if (!sl.isEmpty(objects[4])) {
sql.append(" and o1.time2 >= ?");
paras.add(objects[4] + " 00:00:00");
}
if (!sl.isEmpty(objects[5])) {
sql.append(" and o1.time2 <= ?");
paras.add(objects[5] + " 23:59:59");
}
if (!sl.isEmpty(objects[6])) {
sql.append(" and o2.dept_id = ?");
paras.add(objects[6]);
}
select = "select o1.id, o1.number, o1.type, o1.total, o1.status, o1.status1, date_format(o1.time2, '%y/%m/%d %T') time2, o2.name";
from = " from _order o1 " +
"left join user o2 on o1.open_id = o2.open_id";
orderBy = " order by concat(o1.time2, o1.time1) desc";
if (sl.isEmpty(paras)) {
return paging(false, p, Const.Page.SIZE, false, select, from + sql.toString() + orderBy);
} else {
return paging(false, p, Const.Page.SIZE, false, select, from + sql.toString() + orderBy, paras.toArray());
}
}
回复
杜福忠
2017-01-13 19:11
mysql手册:
一个名为FIND_IN_SET的函数 , 就是设计用来处理这种以 逗号 分割做关系的.
如:
SELECT * FROM massage_js_pending_info
WHERE yn = 1 AND FIND_IN_SET(actionStatus, ? ) AND ...
如果你的 actionStatus 比较多
还可以使用: MATCH AGAINST
度娘一下就知道了
回复
发送
我要反馈
热门反馈
扫码入社