0

我的列表大小由 5000 条记录组成,我每次需要从列表中获取 100 条记录,然后每次保存到 100 条记录,最多有 5000 条记录保存到数据库如何实现这个逻辑?

private  List<DoTempCustomers> doTempCustomers;
for(DoTempCustomers tempCustomers:doTempCustomers){
try {
    temp=new TempCustomers();               
    BeanUtils.copyProperties(temp, doTemp);
    getEntityManager().persist(temp);
}

我上面的代码是为每个循环保留所有 5000 条记录。

4

3 回答 3

1

尝试将列表分成几部分,然后对每个子列表进行操作。如果您需要如何拆分列表,可以参考此链接:如何将数组列表拆分为相等的部分?这给了你想法。

于 2012-12-06T10:17:45.870 回答
0

您可以使用subList方法List来获得较小的视图List

private  List<DoTempCustomers> doTempCustomers;
//initialize doTempCustomers list
List<String> muSubList = doTempCustomers.subList(0, 100);
//this will return a view of the specified range 
//(here from 0 to 99, 0 -inclusive and 100 - exclusive) within this list

参考Javadoc 获取 List#subList

于 2012-12-06T10:28:24.510 回答
0

几天前我解决了同样的问题。我的示例代码每次从列表中保存1000 条记录,而不是在您的情况下为 500 条。

    public void persistData(){

    int tempTblCount = tempTblCount();     // 5000 in your case
    int loopCount = tempTblCount / 1000 + 1;
    int limit = 1;

    while (loopCount > 0) {

       // here i get list of data from temp table having query limit;
       List<MyCustomerVO> myCustomerList = getListFromTempTblData(limit);

       for (iterate over your list) {
              persist your record here;
       }
    }

    limit = limit + 1000;
    loopCount--;

   }

    public List<MyCustomerVO> getListFromTempTblData(int limit) {

    List<MyCustomerVO> getTempTblData = null;
    String sql = " select mobile_number,customer_no from temp_tbl limit "+limit+" , 1000 ";
    execute query;
    return list;

    }
于 2012-12-06T10:52:13.347 回答