我有一个queryDsl booleanbuilder查询,因为我的代码中有很多if:
private Page<QA> query(Pageable pageable, QAFilter filter) {
QA qa = QA.a;
BooleanBuilder bb = new BooleanBuilder();
if (StringUtils.qaNotBlank(filter.getParam())) {
bb.and(likePredicate(qa.param, filter.getCode()));
}
if (StringUtils.qaNotBlank(filter.get2param())) {
bb.and(qa.locationCode.eq(filter.2param()));
}
if (sth == true) {
bb.or(qa.joinedObject.any().field.eq(filter.param));
}
return repo.findAll(bb.getValue(), pageable);
}
如果工作正常,除非“某事”是假的。 当它为真时,booleanbuilder创建一个子查询,检查2个表中的所有行,需要2分钟。 我写了自己的sql,它假装了一秒钟。所以我的问题是如何实现我的SQL到HQL / DSL Querty /等。所以,如果检查我的if,并添加参数查询。 喜欢:
private Page<QA> query(Pageable pageable, QAFilter filter) {
QA qa = QA.a;
JPAQuery query = new JPAQuesry();
query.leftjoin(myobiects);
if (StringUtils.qaNotBlank(filter.getParam())) {
query.where(likePredicate(qa.param, filter.getCode()));
}
if (StringUtils.qaNotBlank(filter.get2param())) {
query.where(qa.locationCode.eq(filter.2param()));
}
if (sth == true) {
query.where(qa.joinedObject.any().field.eq(filter.param));
}
return repo.findInDB(query, pageable);
}
现在如何使用OR,AND等对象进行对比。
答案 0 :(得分:0)
通过调用where:
,可以将BooleanBuilder实例用作查询的谓词query.where(bb);
答案 1 :(得分:0)
问题是关于如何加快查询速度。我想知道如何更改代码等,但最后我决定在外键上创建一个索引(JoinedObjectTable.ForeignKeyToQA - 因为query.where(qa.joinedObject.any()
创建了一个子查询)。因此该指数将速度从2分钟提高到约0.05分。