从db JdbcTemplate

时间:2018-11-08 22:34:14

标签: java database oracle spring-boot jdbctemplate

是否有更好的方法来一次检索大块数据,而不是一次整体读取并分页?我正在尝试使用JdbcTemplate queryForList检索+ 300k行(200 MB)以上的大数据,并为我的API返回一个分页的响应。我找不到任何可行的列名来根据我的需要对数据进行排序,因此使用了ronum record_num。下面是我的代码。

final String sql = "SELECT * FROM (SELECT a.*, rownum record_num FROM (SELECT * FROM tableName WHERE MONTH = ? AND YEAR=?)a)"; 
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, month, year);

2 个答案:

答案 0 :(得分:0)

一种实现方法是使用rownum伪列和换行查询。如果要读取10-20行(请注意rownum从1开始):

SELECT * 
FROM ( SELECT *, rownum r FROM tableName WHERE month = ? AND year = ? ) 
WHERE r > 10 AND r <= 20

但是,如果您使用的是Oracle 12c或更高版本,则可以使用新的database should optimize to skip reading redundant rowsOFFSET语句:

SELECT * 
FROM tableName 
WHERE month = ? AND year = ?
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY

答案 1 :(得分:0)

由于您的问题已用spring-boot标记,我假设您正在以某种方式使用spring-boot。您为什么不考虑使用spring data JPA?

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

这将使您可以使用Repository基础结构。这样您就可以使用PagingAndSortingRepository。这样您就可以分页访问结果。这是reference material