一般情况下向Mysql中更新或是插入数据都是一条一条插入的,在数据量特别大的情况下一般数万条,就会导致虚拟机内存溢出,不能仅仅靠扩大虚拟机内存来掩盖问题。
解决方法有很多种,这里使用其中一种批量更新方法:
在Dao层的save方法中:
@Override
public void saveAll(List<EntityName> modelList)
{
for (int i = 0; i < modelList.size(); i++ )
{
EntityName model=modelList.get(i);
调用封装的saveorUpdate方法一个一个更新对象,实际上还没执行,还在session缓存中
this.saveOrUpdata(model);
//如果缓存中需要更新的数据达到一定量就清空缓存,这样缓存中的数据会批量提交到数据库
if(i%500==0){
this.getSession().flush();
this.getSession().clear();
}
}
//最后量不足设定的值的数据仍存在缓存中,清空缓存,将剩余数据更新入库
this.getSession().flush();
this.getSession().clear();
}
//更新单个对象的方法
@Override
public void saveOrUpdata(BrandMarketChange model)
{
this.saveOrUpdateObject(model);
}
解决方法有很多种,这里使用其中一种批量更新方法:
在Dao层的save方法中:
@Override
public void saveAll(List<EntityName> modelList)
{
for (int i = 0; i < modelList.size(); i++ )
{
EntityName model=modelList.get(i);
调用封装的saveorUpdate方法一个一个更新对象,实际上还没执行,还在session缓存中
this.saveOrUpdata(model);
//如果缓存中需要更新的数据达到一定量就清空缓存,这样缓存中的数据会批量提交到数据库
if(i%500==0){
this.getSession().flush();
this.getSession().clear();
}
}
//最后量不足设定的值的数据仍存在缓存中,清空缓存,将剩余数据更新入库
this.getSession().flush();
this.getSession().clear();
}
//更新单个对象的方法
@Override
public void saveOrUpdata(BrandMarketChange model)
{
this.saveOrUpdateObject(model);
}