gpt4 book ai didi

java - 创建条件语句,一次查询得到结果和行数

转载 作者:行者123 更新时间:2023-11-29 12:25:26 24 4
gpt4 key购买 nike

我正在尝试获取结果以及单个查询中的行数以进行分页。

这是我到目前为止得到的:

public List<User> getUsers(int page, int size, boolean somecondition) {


Criteria criteria = getSession().getCurrentSession().createCriteria(User.class);

ProjectionList projectionList = Projections.projectionList();

projectionList.add(Projections.property("name").as("name"));
projectionList.add(Projections.property("createdAt").as("createdAt"));
projectionList.add(Projections.property("id").as("id"));
projectionList.add(Projections.rowCount());
projectionList.add(Projections.groupProperty("id"));

criteria.setProjection(projectionList);

// pseudo Restrictions added
if (somecondition) {
criteria.add(Restrictions.isNotNull("email"));
}

if (somecondition) {
criteria.add(Restrictions.isNotNull("name"));
}

// Now here do something to get the row count without doing a second query
long count;

ScrollableResults scrollableResults = criteria.scroll();
scrollableResults.last();
count = scrollableResults.getRowNumber() + 1;
scrollableResults.close();

log.info("users count : {}", count);

criteria.setMaxResults(size);
criteria.setFirstResult(page);

criteria.setResultTransformer(new AliasToBeanResultTransformer(User.class));
List<User> users = criteria.list();

users.forEach(u -> log.info(u.toString()));

return users;
}

read我可以使用 ScrollableResults 来获取行数而无需第二次查询,但这不起作用,我仍然在控制台中看到有 2 个查询。

我并不是要获取总结果,重要的是获取满足条件的结果的数量。

有什么建议吗?

最佳答案

这是我过去通过一次查询获取计数和结果的方式。

def result = Domain.createCriteria().list(max:10, offset:20){
//conditions
}
def count = result.totalCount

它给出了不受限制和偏移量影响的行总数。希望对您有所帮助!

关于java - 创建条件语句,一次查询得到结果和行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41365130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com