2013-01-15 18 views
1

我已經下面的代碼中,我必須根據BATCHSIZE
創建對象的列表任何機構可以建議如何實現這一點,我想在RowMapper的類檢查的rownum的等於批次大小那麼問題是
如何返回,並創建的RowMapper List實現獲取從RowMapper的預定義的大小名單在Spring的JdbcTemplate

public class TestAppDao { 
public JdbcTemplate jdbcTemplate; 

public JdbcTemplate getJdbcTemplate() { 
    return jdbcTemplate ; 
} 

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { 
    this.jdbcTemplate = jdbcTemplate; 
} 

public List<Circle> getAllCircle(int batchSize){ 
    String sql = "select * from circle"; 
    return jdbcTemplate.query(sql, new Object[]{}, new CircleMapper()); 
} 

private static final class CircleMapper implements RowMapper<Circle>{ 

    @Override 
    public Circle mapRow(ResultSet resultSet, int rowNum) throws SQLException { 

     Circle circle = new Circle(); 
     circle.setId(resultSet.getInt(1)); 
     circle.setName(resultSet.getString(2)); 
     return circle; 
    } 

} 

}

+1

我想你可以使用sql limit關鍵字只返回你想要的圈數。 – Luciano

+0

如果'select'返回的元素少於您的預定義大小,是否是錯誤? –

+0

正確Abhinav,以前我使用計數,同時迭代通過resultSet.next()時count等於大小,打破循環和返回對象列表 – Abhij

回答

1

我想你已經基本上2種選擇:

但是第二個選項不保證從DB服務器返回的結果只有那麼多,因爲額外的結果可能只是由JDBC本身削減=>它可能性能較差(對於oracle情況,請參閱:How to limit number of rows returned from Oracle at the JDBC data source level?

我認爲在你的代碼中將它作爲最差的選項來切割它,因爲你需要自己迭代它而且你沒有性能增益(總是從數據庫中選擇全部)。

相關問題