下面列出了org.hibernate.engine.spi.RowSelection#setMaxRows ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private Query createQuery() {
Query jpaQuery = createBaseQuery();
if (range != null) {
jpaQuery.setFirstResult(range.getStartIndex());
// range is 0 based, so we add 1
jpaQuery.setMaxResults(range.getLastIndex() - range.getStartIndex() + 1);
} else if (page != null) {
jpaQuery.setFirstResult(page.index * page.size);
jpaQuery.setMaxResults(page.size);
} else {
// Use deprecated API in org.hibernate.Query that will be moved to org.hibernate.query.Query on Hibernate 6.0
@SuppressWarnings("deprecation")
RowSelection options = jpaQuery.unwrap(org.hibernate.query.Query.class).getQueryOptions();
options.setFirstRow(null);
options.setMaxRows(null);
}
return jpaQuery;
}
@Test
public void testLimit() {
RowSelection rowSelection = new RowSelection();
rowSelection.setMaxRows(getMaxRows());
long startNanos = System.nanoTime();
doInJDBC(connection -> {
try (PreparedStatement statement = connection.prepareStatement(SELECT_POST)
) {
statement.setMaxRows(getMaxRows());
assertEquals(getMaxRows(), processResultSet(statement));
} catch (SQLException e) {
fail(e.getMessage());
}
});
LOGGER.info("{} Result Set with limit took {} millis",
dataSourceProvider().database(),
TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNanos));
}
@Test
public void testLimit() {
RowSelection rowSelection = new RowSelection();
rowSelection.setMaxRows(getMaxRows());
long startNanos = System.nanoTime();
doInJDBC(connection -> {
try (PreparedStatement statement1 = connection.prepareStatement(SELECT_POST_COMMENT_1);
PreparedStatement statement11 = connection.prepareStatement(SELECT_POST_COMMENT_1);
PreparedStatement statement2 = connection.prepareStatement(SELECT_POST_COMMENT_2);
) {
statement1.setMaxRows(getMaxRows());
assertEquals(getMaxRows(), processResultSet(statement1));
assertEquals(getPostCommentCount() * getPostCount(), processResultSet(statement11));
assertEquals(getPostCommentCount() * getPostCount(), processResultSet(statement2));
} catch (SQLException e) {
fail(e.getMessage());
}
});
LOGGER.info("{} Result Set with limit took {} millis",
dataSourceProvider().database(),
TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNanos));
}
@Test
public void testLimit() {
final RowSelection rowSelection = new RowSelection();
rowSelection.setMaxRows(getMaxRows());
LimitHandler limitHandler = ((SessionFactoryImpl) sessionFactory()).getDialect().getLimitHandler();
String limitStatement = limitHandler.processSql(SELECT_POST_COMMENT, rowSelection);
long startNanos = System.nanoTime();
doInJDBC(connection -> {
try (PreparedStatement statement = connection.prepareStatement(limitStatement)) {
limitHandler.bindLimitParametersAtEndOfQuery(rowSelection, statement, 1);
statement.setInt(1, getMaxRows());
statement.execute();
int count = 0;
ResultSet resultSet = statement.getResultSet();
while (resultSet.next()) {
resultSet.getLong(1);
count++;
}
assertEquals(getMaxRows(), count);
} catch (SQLException e) {
fail(e.getMessage());
}
});
LOGGER.info("{} Result Set with limit took {} millis",
dataSourceProvider().database(),
TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNanos));
}