我想在cnd拼接各种条件之前,先拼接一些inner join语句
请问除了自定义sql以外,还有其他办法嘛?
我想在cnd拼接各种条件之前,先拼接一些inner join语句
请问除了自定义sql以外,还有其他办法嘛?
不行哎,join前还是会有where
Cnd cnd = Cnd.NEW();
cnd.and(new Static(" inner join xxx as c on xxx.aaa = c.bbb"));
生成sql:
SELECT COUNT(*) FROM aaa WHERE inner join xxx as c on xxx.aaa = c.bbb AND aaa.bbb=? AND c.ddd=? AND ........
我执行:
this.dao().query(xxx.class, cnd2, pager);
是正常的injo+where语句,没问题
但是我执行:
this.dao().count(xxx.class,cnd2)
执行的sql语句是:
SELECT COUNT(*) FROM xxx
我怀疑是个bug。。。。。
cnd2是我拼接的sql,inner join+where条件的自定义sql
Condition cnd2 = new SimpleCriteria(sql);
这么来的,有了cnd2我就可以查询了,然后执行
this.dao().query(xxx.class, cnd2, pager);
ok,没问题查询语句正常,然后执行
this.dao().count(xxx.class,cnd2)
查看log里的语句为:
SELECT COUNT(*) FROM xxx
不是应该是我们拼接的join+where的sql语句嘛?怎么成查询所有了?
private int _count(Entity<?> en, String tableName, Condition cnd) {
// 如果有条件的话
if (null != cnd) {
Pojo pojo = pojoMaker.makeFunc(tableName, "COUNT", "*");
pojo.setEntity(en);
if (cnd instanceof Criteria) {
pojo.append(((Criteria) cnd).where()); //跟踪到这里,cnd里的内容是:inner join xxx on xxx.xxx = xxx.xxx where xxx = 'xxx',总之是我的sql,到这里是没问题的
GroupBy gb = ((Criteria) cnd).getGroupBy(); //到这里pojo里的内容依然是:select count(*) from xxx,不是应该变成cnd里的sql嘛?
pojo.append(gb);
}
// 否则暴力获取 WHERE 子句
else {
String str = Pojos.formatCondition(en, cnd);
if (!Strings.isBlank(str)) {
String[] ss = str.toUpperCase().split("ORDER BY");
pojo.append(Pojos.Items.wrap(str.substring(0, ss[0].length())));
}
}
// 设置回调,并执行 SQL
pojo.setAfter(_pojo_fetchInt);
_exec(pojo);
return pojo.getInt();
}
// 没有条件,直接生成表达式
return func(tableName, "COUNT", "*");
}