我正在使用 SpringBoot 2.3.1 和 Spring Data 来访问 PostgreSQL。我有以下简单的控制器:
@RestController
public class OrgsApiImpl implements OrgsApi {
@Autowired
Orgs repository;
@Override
public ResponseEntity<List<OrgEntity>> listOrgs(@Valid Optional<Integer> pageLimit,
@Valid Optional<String> pageCursor, @Valid Optional<List<String>> domainId,
@Valid Optional<List<String>> userId) {
List<OrgEntity> orgs;
if (domainId.isPresent() && userId.isPresent()) {
orgs = repository.findAllByDomainIdInAndUserIdIn(domainId.get(), userId.get());
} else if (domainId.isPresent) {
orgs = repository.findAllByDomainIdIn(domainId.get());
} else if (userId.isPresent()) {
orgs = repository.findAllByUserIdIn(userId.get());
} else {
orgs = findAll();
}
return ResponseEntity.ok(orgs);
}
}
还有一个简单的 JPA 存储库:
public interface Orgs extends JpaRepository<OrgEntity, String> {
List<OrgEntity> findAllByDomainIdIn(List<String> domainIds);
List<OrgEntity> findAllByUserIdIn(List<String> userIds);
List<OrgEntity> findAllByDomainIdInAndUserIdIn(List<String> domainIds, List<String> userIds);
}
上面的代码有几个明显的问题:
- 如果查询参数的数量会增长,那么这个 if 增长非常快并且难以维护。问题:有没有办法用动态数量的参数构建查询?
- 此代码不包含支持游标的机制。问: Spring Data 中是否有支持基于游标查询的工具?
如果回答了第一个问题,则可以轻松阅读第二个问题。
先感谢您!