遇到关联查询,然后需要使用and(A.xx or A.cc or B.xx)场景, 在Query 不相同下可以使用如下解决办法,注意new AQuery(“D”) 与 Query aQuery = new AQuery(“D”) 要一致。
Query aQuery = new AQuery("D")
.select
.realname("doctorName")
.end();
BQuery bQuery = new BQuery("P")
.select
.name("patientName")
.end()
.where
.and(q -> q.where.name().like(so.getTerm(), If::notBlank)
.or.idcard().like(so.getTerm(), If::notBlank)
.or.phone().like(so.getTerm(), If::notBlank)
.or(new AQuery("D").select
.realname("doctorName")
.end()
.where
.realname().like(so.getTerm(), If::notBlank)
.end())
.end())
.end();
MQuery mQuery = mapper.query()
.selectAll()
.where
.id().ne("null")
.end()
IQuery query = JoinBuilder
.from(mQuery )
.leftJoin(aQuery )
.on(l -> l.where.doctorId(), r -> r.where.id())
.endJoin()
.leftJoin(bQuery )
.on(l -> l.where.patientId(), r -> r.where.id())
.endJoin()
.build();
return mapper.listEntity(query);