我正在使用Spring JdbcTemplate
接口从MS SqlServer数据库获取数据。 在我看到的文档中有setMaxRows()
方法来为所有查询设置一个限制,但是如果我只想限制一个select,该怎么办?Spring JdbcTemplate:如何限制选定的行?
有没有办法以“可配置”的方式为特定的调用查询设置限制?
我正在使用Spring JdbcTemplate
接口从MS SqlServer数据库获取数据。 在我看到的文档中有setMaxRows()
方法来为所有查询设置一个限制,但是如果我只想限制一个select,该怎么办?Spring JdbcTemplate:如何限制选定的行?
有没有办法以“可配置”的方式为特定的调用查询设置限制?
限制特定查询的结果集可以通过将限制直接放入查询来完成。请咨询您的数据库供应商文档以查看它是否支持例如LIMIT
。
例如在MySQL的:SELECT * FROM EMPLOYEE LIMIT 10
一些基于SQL查询语言(德比)不支持LIMIT
关键字。所以你不能直接在查询中使用LIMIT。使用Spring JDBC模板,我们可以通过setMaxRows(Integer intvalue)
jdbcTemplate.setMaxRows(1);
查询您还可以限制用户的关键字设置所需要的最大行数。请参阅下面的查询
select * from FileShare limit 3 offset 3
如果您的应用程序的限制和偏移可以动态用户使用配置如下查询
@Autowired
private JdbcTemplate template;
public JdbcTemplate getTemplate() {
return HibernateUtil.getJdbcTemplate();
}
public List<FileShare> getAllSharedFiless(int limit,int offset)
throws ShareMeException {
String query="select * from FileShare limit ? offset ?";
return getTemplate().query(query,
new SharedFilesRowMapper(),
new Object[]{limit,offset});
}
这里FileShare
是一个表名和SharedFilesRowMapper
是RowMapper的从表,表行。
对于这些语句使用自己的PreparedStatementCreator并在创建预准备语句时调用Statement.setMaxRows()会怎样? – 2012-04-03 08:39:41
@a_horse_with_no_name这似乎是一个好主意,你能否给我提供一些使用'PreparedStatementCreator'的例子,我是Spring的新手...... – davioooh 2012-04-03 10:33:19
我是Spring的新手,否则我会用一个例子添加一个答案: ) – 2012-04-03 11:30:38