如何使用spring jdbc模板从包含数百万条记录的表中获取数据

时间:2017-06-28 21:29:21

标签: java mysql java-8 spring-jdbc jdbctemplate

我正在尝试使用spring jdbc模板获取数据。 该表有数百万条记录。

使用以下代码需要花费无限时间,最后我停止运行代码。

private static final String CLIENTDATA_QUERY = "select logtime, clientip, clientagent, uri from client_data";
public List<ClientDataModel> readFromClientDataDB() {
//      jdbcTemplate.setFetchSize(1000);
        List<ClientDataModel> clientData = jdbcTemplate.query(CLIENTDATA_QUERY, new RowMapper<ClientDataModel>() {

            @Override
            public ClientDataModel mapRow(ResultSet rs, int rowNum) throws SQLException {
                ClientDataModel model = new ClientDataModel();
                model.setLogtime(rs.getString("logtime"));
                model.setClientIP(rs.getString("clientip"));
                model.setClientAgent(rs.getString("clientagent"));
//              model.setUri(rs.getString("uri"));
                return model;
            }
        });

        System.out.println("Client Data Size :" + clientData.size());
        return clientData;
    }

请有人建议我如何以最有效的方式从一张大桌子中检索记录。

需要获取所有记录,然后开始进一步逻辑的代码。这是在服务器端。

1 个答案:

答案 0 :(得分:1)

不要使用返回列表的方法而是使用RowCallBackHandler.您也可以在查询中使用分页。

JDBCTemplate需要以对象的形式读入从数据库中检索的所有数据,在保存大型结果集时占用大量内存。在这种情况下,Spring Batch是更好的解决方案。