关于dao的优化小建议

blob.png

IN (?) 语句不能用?占位符传参,需拼接字符串,总感觉好奇怪,是我使用方式不对吗?


评论区

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

度娘一下就知道了

热门反馈

扫码入社